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