当用户不使用任何条件输入3时如何打印7

问题描述 投票:0回答:2

当用户输入 3 时,它会打印 7 作为输出,当用户输入 7 时,它会打印 3 作为输出,但不使用任何条件和循环。

这就是我所做的。问题是我使用 2 个数字作为输入,但我必须用一个输入来完成。

void main() {
  print(mod(7, 3));
}

int mod(int num1, int num2) {
  //3*2 mod 7
  //7*2 mod 3
  int answer = (num1 * 2) % num2 + 1;
  return answer;
}

您可以使用任何语言来解决这个问题。

logic language-agnostic modulo
2个回答
0
投票

让我们看一下 3 和 7 的二进制表示:3 是

0...0011
,7 是
0...0111
,这意味着 3 和 7 之间唯一不同的位是第 3 位。因此,我们可以简单地通过“翻转”第 3 位来将 3 转换为 7,反之亦然。

“翻转一点”可以通过“异或”运算来完成。 Xor 是一个非常有用的操作(我最喜欢的操作之一):一种看待它的方法是考虑你有一个数据输入和一个控制输入,如果控制输入为 0,则数据输入保持不变,但是如果控制输入为 1,则翻转数据输入(您可以绘制 Xor 真值表来说服自己相信这种解释)。当然,这只是考虑异或运算的一种方法,但它在我们的情况下特别有用:我们想要翻转第三位,并保持所有其他位不变。

C 提供了“按位异或”运算(

 A ^ B
),它对 A 和 B 的每一位进行异或。因此,我们想要的是有一个数字,我们将使用它作为控制数字,即第 3 位是 1 并且所有其他位都是 0:这个数字是 4。

最后,我们只需将 4 与输入进行异或运算,就可以让这个函数将 3 转换为 7,反之亦然。

#include <stdio.h> 

int flip(int num1) {
    return num1 ^ 4;
}

void main() {
    printf("%d", flip(3)); 
}


0
投票

给你:

void main() {
  print('Enter a number (3 or 7):');
  var input = int.parse(stdin.readLineSync());

  // Calculate the swapped value
  var result = 10 - input;

  print('Output: $result');
}
© www.soinside.com 2019 - 2024. All rights reserved.