一个小程序
- C/C++ code
int main(){ const int MOD = 1000000; int i, j, n; int S = 0; scanf("%d", &n); for(i = 1; i <= n; i++) { int factorial = 1; for(j = 1; j <= i; j++) factorial = factorial * j ; S += factorial; } printf("%d\n", S % MOD); return 0;}我的电脑里int占4个字节,但为何我输入20,输出确实40729?
但实际答案应该是820313.
我觉得应该不会溢出吧?
我测试了下,大概从n=11,12开始似乎有出现溢出了。
求解答。。。
[解决办法]
把S、factorial替换成long long型就可以了
[解决办法]
20! = 2432902008176640000
[解决办法]
上溢出了
[解决办法]
确实溢出了啊。。。。
你加个断点看下
[解决办法]
溢出了, 因为2的31次方 = 2147483648, 远小于20!
[解决办法]
溢出了