阶乘的和问题输出错误

阶乘的和问题,输入1=<n<=25,当n比较大时输出了错误的答案



int main(){
    int n;
    int fac=1;
    int sum=0;
    scanf("%d",&n);
    int i,j;
    for(i=1;i<=n;i++){
    for(j=1;j<=i;j++){
        j=j%10007;
        fac=fac*j;  
    }
    fac=fac%10007;
    sum=sum+fac;
    fac=1;
    }
    
    int t;
    t=sum%10007;
    printf("%d",t);
    return 0;
}

计算时使用了公式

img

12行fac溢出,在后面对10007取余就好
fac=fac*j%10007;

n小的时候正确,n大的时候错误,很显然数据溢出了
int放不下了呗,换成更大的类型来存

 
 
int main(){
    int n;
    int fac=1;
    int sum=0;
    scanf("%d",&n);
    int i,j;
    for(i=1;i<=n;i++){
    for(j=1;j<=i;j++){
        j=j%10007; //这行有啥意义呢?j还能大于1万??
        fac=fac*j;     //fac只是个int类型,13的阶乘就溢出了,25的阶乘连超出8字节存储空间,应该在这里就进行求余才行
    }
    fac=fac%10007;  //为啥求余10007呢?
    sum=sum+fac;
    fac=1;
    }
    
    int t;
    t=sum%10007;
    printf("%d",t);
    return 0;
}