用嵌套循环求阶乘,为啥输入小一点的数是对的,到了十几就错了呢……

#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 型的数据范围了。