应该是类型的问题,改为int型就可以了
#include
int main()
{
int i, n;
int sum = 0, f = 1;
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
f *= i;
sum += f;
}
printf("%d\n",sum);
return 0;
}
数值范围超大,可以使用64位整数处理:
#include
int main()
{
int i,n=20;
__int64 sum=0, f=1;
for (i=1;i<=n;i++) {
f *=i;
sum += f;
}
printf("%lld\n", sum);
return 0;
}
注:这是gcc的写法,不同编译器,可能写法不一样:printf("%l64d\n", sum);
printf("%.0f\n",sum);这一句中的"%0.f\n”中的f应该是float吧?而你要输出的是个double,double转成float肯定是被截断了,所以到20以后就不正确了。
数据溢出。。。。。。。。。
用long int