1.解析函数功能
Mul(a,b);即a=a*b,高精度*单精度
void Mul(int a[],int b){
for(int i=1;i<=a[0];i++)//单精度数b和高精度数a的每一位相乘
a[i]*=b;
for(int i=1;i<=a[0];i++){//处理每一位上的进位
a[i+1]+=a[i]/10;
a[i]%=10;
}
while(a[a[0]+1]>0){//最高位上如果有进位则位数a[0]增加后继续处理,可根据情况决定是否要分成一位一位的
a[0]++;
a[a[0]+1]=a[a[0]]/10;
a[a[0]]%=10;
}
}
Add(a,b);即a=a+b;高精度+高精度
void Add(int a[],int b[]){//相加模块
if(a[0]9) a[i+1]++,a[i]-=10;
}
if(a[a[0]+1]>0) a[0]++; //如果最高位上有进位,则结果位数要加一位
return;
}
三.C语言源码
#include四.声明#include #include #include #define N 5005 void Mul(int a[],int b){ for(int i=1;i<=a[0];i++)//单精度数b和高精度数a的每一位相乘 a[i]*=b; for(int i=1;i<=a[0];i++){//处理每一位上的进位 a[i+1]+=a[i]/10; a[i]%=10; } while(a[a[0]+1]>0){//最高位上如果有进位则位数a[0]增加后继续处理,可根据情况决定是否要分成一位一位的 a[0]++; a[a[0]+1]=a[a[0]]/10; a[a[0]]%=10; } } void Add(int a[],int b[]){//相加模块 if(a[0]9) a[i+1]++,a[i]-=10; } if(a[a[0]+1]>0) a[0]++; //如果最高位上有进位,则结果位数要加一位 return; } int main(){ int a[N],c[N];//c存放最后答案 int n; scanf("%d",&n); memset(a,0,sizeof(a)); memset(c,0,sizeof(c));//存放最终结果 a[1]=1;a[0]=1; for(int i=2;i<=n;i++) { Add(c,a);//c+=a Mul(a,i);//a=a*i } Add(c,a); for(int i=a[0];i>0;i--) printf("%d",c[i]); //倒序输出每一位,有时候需要处理最高位上有0的情况,具体情况再具体处理 return 0; }
参考文章:https://blog.csdn.net/flymist/article/details/84961066



