输入 :
cout << (4 % ((10^9)+1) );
输出 :
0
编译器:g++ 4.8.4
我不知道为什么编译器打印该值是 0。我现在必须做什么才能获得预期的输出?
打印输出的正确代码是什么?
^
是按位异或运算,而不是指数运算。10 ^ 9 是 3。
所以4 % ((10 ^ 9) + 1)
= 4 % (3 + 1)
= 4 % 4
= 0
。编译器是正确的。
您的意思是std::pow(10L, 9L)
,注意不要溢出整数类型吗?那么答案将是 4(尽管您必须将返回值std::pow
转换为运算符的适当整数类型%
)。
((10^9)+1) = 4
4 % 4 = 0
% 运算符返回除法的余数。例如,4/3 = 0 和 3 作为余数,所以它会返回 3,但 4/4 = 1 并且没有余数,所以它返回 0。
谢谢你解释这个逻辑。在您的帮助下,我已经理解了这个逻辑,这是我解决的这个逻辑的解决方案。
cout << (4 % ((10^9)+1) ); ==> cout <<fmod(5, (pow(10,9)+1));
我的错误是使用^ 而不是 pow()和% 而不是 fmod()。
我不知道为什么编译器打印该值是 0。我现在必须做什么才能获得预期的输出?
(10^9) == 3
^
运算符在 C++ 中是按位异或。也就是说,在二进制
decimal binary
10 0110
9 0101
0110 ^ 0101 == 0011
因此:
10^9 == 3
最后:
(10^9) + 1 == 4
和
4 % ((10^9) + 1) == 0