求大神帮忙解释一下下面这段c语言程序!

下面这段是大整数求阶乘的程序,求大神解释一下原理,附数值解释一下,最好详细点~谢过各位大神了
#include <stdio.h>
#include <string.h>
void main()
{
void mult(char s[],int n);
void add(char s1[], char s2[]);
int time ,j;
printf("请输入要执行的次数:");
scanf("%d",&time);
for(j=0;j<time;j++)
{
int n, jinwei=0, shi, ge, num,i;
printf("请输入1--150之内的整数!");
scanf("%d",&n);
if(n>0&&n<=58){
char b[1000];
char a[1000];
a[0]='1';
for(i=1;i<=999;i++)
a[i]=0;
for(i=1;i<=n;i++)
{
strcpy(b,a);
num=strlen(a);
shi = i%100/10;
ge = i%10;
mult(a, ge);
if(shi)
{
mult(b, shi);
num=strlen(b);
b[num]=48;
b[num+1]=0;
add(a, b);
}
}
if(shi>0)
{
printf("%d%d!=",shi,ge);
puts(a);
}
else
{
printf("%d!=",ge);
puts(a);
}
}
else printf("错误");
}
}
void add(char s1[], char s2[])
{
int i, m, n, k, jinwei=0;
m=strlen(s1);
n=strlen(s2);
if(m>=n)
{
for(i=n; i>=0; i--)
s2[i+m-n]=s2[i];
for(i=0; i<m-n; i++)
s2[i]=48;
}
else
{
for(i=m; i>=0; i--)
s1[i+n-m]=s1[i];
for(i=0; i<n-m; i++)
s1[i]=48;
}
for(i=m-1; i>=0; i--)
{
k=s1[i]+s2[i]+jinwei-96;
s1[i]=k%10+48;
jinwei=k/10;
}
if(jinwei)
{
for(i=m; i>=1; i--)
s1[i]=s1[i-1];
s1[0]=49;
s1[m+1]=0;
}
}
void mult(char s[], int x)
{
int i, m, n, jinwei=0;
n=strlen(s);
for(i=n-1; i>=0; i--)
{
m=(s[i]-48)*x+jinwei;
s[i]=m%10+48;
jinwei=m/10;
}
if(jinwei)
{
{
for(i=n; i>=1; i--)
s[i]=s[i-1];
s[0]=jinwei+48;
}
s[n+1]=0;
}
}

这是一个高精度程序,概括地说就是给加法和乘法分别写了函数,用我们平时笔算(竖式)一样的方法算。计算int型存不下的大数据时常用这种方法。你具体哪里不懂可以把那段抽出来追问我。追问

谢谢,我懂了!

温馨提示:答案为网友推荐,仅供参考