核心是利用数组存储大数的每一位,乘数依次乘以数组的每一位,最后做规范化处理
以下是计算1000的阶乘的源代码
int iArr[10000];
void init(){
iArr[9999]=1;
for(int i=0;i<9999;i++)
iArr[i]=0;
}
void caculateArr(int m){
for(int i=0;i<10000;i++){
if(iArr[i]==0)
continue;
iArr[i]*=m;
}
}
void formatArr(){
int ii=0;
for(int i=9999;i>=0;i--){
if(iArr[i]<10)
continue;
else{
ii=i;
do{
iArr[ii-1]+=iArr[ii]/10;
iArr[ii]%=10;
ii--;
}while(iArr[ii]>=10);
i=ii;
}
}
}
void scanArr(int i){
printf("%d ",i);
int tag=0;
for(i=0;i<10000;i++){
if(iArr[i]==0&&tag==0)
continue;
tag=1;
printf("%d",iArr[i]);
}
printf("\n");
}
void Print_Factorial ( const int N ){
if((N<0)|(N>1000))
printf("Invalid input");
else if(N==0)
printf("1");
else{
init();
int i=1;
while(i>0&&i<=N){
caculateArr(i);
formatArr();
//scanArr(i);
i++;
}
int tag=0;
for(i=0;i<10000;i++){
if(iArr[i]==0&&tag==0)
continue;
tag=1;
printf("%d",iArr[i]);
}
printf("\n");
}
}
void main(){
Print_Factorial(1000);
}