这是我编的程序,但是当n=20时结果不对,结果应为2561327494111820313。求大神指教!
#include<stdio.h>
int main()
{
int i, n;
double sum = 0, f = 1;
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
f *= i;
sum += f;
}
printf("%.0f\n",sum);
return 0;
}
应该是类型的问题,改为int型就可以了
#include<stdio.h>int不行,用long int 或 __int64可以。
追答我电脑上我看了过程,long long 型都还会溢出
用__int64是对的,能解释一下__int64这个数据类型吗? 谢谢!
追答现在的CPU基本上都是64的了,以前32位CPU时代,整数上限是2的32次方,
而64CPU则是2的64次方,
为了兼容以前的代码,所以现在的int仍然表示2的32次方,对64位int型数据,则增加了新的数据类型__int64,没什么特殊的,只要记住就可以。
现在的 int类型也可以写作:__int32,即32位整数
我用的是double啊
用long int n=20时,结果为268040729。但是,通过OJ提交答案是对的。请问这是为什么?
追答因为 double 位数没有 long int 多 望采纳