/*
高精度计算累乘
运用数组存储
2025/11/5 written by CanL
*/
#include<stdio.h>
#define MAX 999
int main(){
int getin,position,a[MAX];
//position为当前数组索引
for(int n=1;n<=35;n++){
//n为当前累乘的数字
for(int i=0;i<MAX;i++) a[i]=0; // 初始化数组为0
//每次循环重置位数 以及调整a[0]=1
position=0;
a[0]=1;
for(int i=2;i<=n;i++){
getin=0;//循环一次重置进位计算
for(int j=0;j<=position;j++){
getin += a[j] * i ;//计算当前位的结果
a[j] = getin % 10;//保留本位
getin /= 10;//计算进位
}
while(getin){//大于0时,说明还有进位
position++;//进位后,位数增加
a[position] = getin % 10;
getin /= 10; // 必须有这一行,否则循环不会终止
}
}
//输出当前累乘的结果
printf(“%d! = “,n);
for(int i=position;i>=0;i–){
printf(“%d”,a[i]);
}
printf(“\n”);
}
return 0;
}