因此,这里有一个问题,当用户输入3比它打印7作为输出,什么时候用户输入7比它打印3作为输出,但没有使用任何条件和循环。
这里是我的done.But,问题是我使用两个数字作为输入,但是我必须用一个输入来完成它。
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;
}请帮助如何做this.You可以使用任何语言来解决这个问题。
发布于 2022-05-22 21:14:26
让我们看一下3和7:3的二进制表示形式是0...0011,7是0...0111,这意味着3和7之间唯一不同的位是第3位。因此,我们可以将3转换为7,反之亦然,只需“翻转”第3位。
“翻转一点”可以通过“独占-或”操作来完成。Xor是一种非常有用的操作(我最喜欢的操作之一):一种方法是考虑有数据输入和控件输入,如果控件输入为0,则数据输入保持不变,但如果控件输入为1,则数据输入被翻转(您可以绘制Xor的真值表以使自己相信这种解释)。当然,这只是考虑xor操作的一种方式,但在我们的情况下,它特别有用:我们想翻转第三位,并保持其他所有位不变。
C提供一个“逐位xor”操作( A ^ B),它对A和B的每一个位执行xor,因此,我们想要的是一个数字,作为控制号,第3位是1,所有其他位都是0:这个数字是4。
最后,我们可以使用这个函数将3转换为7,反之亦然,只需对输入应用Xor和4。
#include <stdio.h>
int flip(int num1) {
return num1 ^ 4;
}
void main() {
printf("%d", flip(3));
}https://stackoverflow.com/questions/72336244
复制相似问题