读书人

一个小程序解决方法

发布时间: 2012-03-02 14:40:29 作者: rapoo

一个小程序

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!
[解决办法]
溢出了

读书人网 >C++

热点推荐