高精度乘法和加法进行阶乘

include <stdio.h>

int main(){
int n;
scanf("%d",&n);

//定义两个数组,一个用乘法存n!,一个用加法存sum;
int a[100]={0};int b[100]={0};
a[0]=1;b[0]=1;
int i;int j;
for(i=2;i<=n;i++){//1*2*3*...*(n-1)*n
   
    for(j=0;j<100;j++){ //对于每个i,要乘以上一个数的所有位数
        a[j]*=i;
    }

    for(j=0;j<99;j++){//每一项都乘完后再进位
        if(a[j]>9){
        a[j+1]+=a[j]/10;
        a[j]=a[j]%10;
        }
    }
    
    
    for(j=0;j<100;j++){//每算完一个n!,各位加到b中,由于是从2!开始计算,直接加上b[0]=1;
        b[j]+=a[j]; //对于每个n!,各位都加并立刻进位
        if(b[j]>9){
            b[j+1]+=b[j]/10;
            b[j]=b[j]%10;
        }
    }
}

for(i=99;i>=0&&b[i]==0;i--); //找到第一个不为0的地方

for(j=i;j>=0;j--){ //倒序输出
    printf("%d",b[j]);
}
return 0;

}

posted @ 2025-11-07 23:26  Wang040404  阅读(0)  评论(0)    收藏  举报