高精度乘法和加法进行阶乘
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;
}
浙公网安备 33010602011771号