#include<stdio.h>
int main()
{
int i,n,item;
scanf("%d",&n);
double sum;
if(n<0){
return 0;
}
sum=0.0;
for(i=1;i<=n;i++){
item=1;
for(int j=1;j<=i;j++){
item=item*j;
}
sum=sum+item;
}
printf("%.0f",sum);
}
因为数据类型有范围的。换成long long 类型。
#include<stdio.h>
int main()
{
int i,n;
long long item;
scanf("%d",&n);
long long sum;
if(n<0){
return 0;
}
for(i=1;i<=n;i++){
item=1;
for(int j=1;j<=i;j++){
item=item*j;
}
sum=sum+item;
}
printf("%lld",sum);
}
int类型的值是有范围的
你换成long long类型就能更大了
因为item溢出了
阶乘增长很快,使用int承载中间值的时候,很容易产生溢出
虽然是使用了表示范围更广的sum承载最终结果,但是中间的item变量产生了溢出
int 型 数据范围-2147483648 ~ +2147483647 ,当我们算到 13!的时候,就已超出int 型的数据范围了。