该程序实现了一个大数阶乘计算功能。通过数组存储大数,从低位到高位依次计算,处理进位问题。主程序测试了1、5和150的阶乘结果。核心函数fun()实现大数乘法,fun1()循环计算阶乘,printArr()输出结果。程序使用固定大小数组(102400位)存储计算结果,适用于大数运算,能正确输出1!、5!和150!的值。
cpp
#include<stdio.h>
#define M 102400
int arr[M]={1};
int len =1;
void fun(int n){ //arr X n
int f=0;//是否有进位
for(int i=0;i<len;i++){
int tmp=n*arr[i]+f;
arr[i]=tmp%10;
f=tmp/10;
}
while(f){
arr[len]=f%10;
len++;
f/=10;
}
}
void fun1(int n){
for(int i=1;i<=n;i++)
fun(i);
}
void printArr(){
for(int i=0;i<len;i++){
printf("%d",arr[len-i-1]);
}
}
void test(int n){
for(int i=0;i<M;i++){
arr[i]=0;
}
arr[0]=1;
fun1(n);
printArr();
puts("");
}
int main(){
test(1);
test(5);
test(150);
return 0;
}