作业比赛编号 : 100000593 - 《算法笔记》5.6小节——数学问题->大整数运算 问题 B: N的阶乘

int 型数与大整数的乘积,注意要将大整数初始化为1,长度也为1,即
while(scanf("%d",&b)!=EOF){
bign a;
a.num[0]=1;
a.len=1;
for(int i=b;i>0;i--)
{
a=multi(a,i);
}
print(a);
}
完整代码
#include<cstdio>
#include<cstring>
typedef struct bign{
int num[5000];
int len;
bign(){
memset(num,0,sizeof(num));
len=0;
}
}bign;
bign multi(bign a,int b)
{
int carry=0;
bign c;
for(int i=0;i<a.len;i++){
int temp=a.num[i]*b+carry;
c.num[c.len++]=temp%10;
carry=temp/10;
}
while(carry){
c.num[c.len++]=carry%10;
carry/=10;
}
return c;
}
void print(bign c)
{
for(int i=c.len-1;i>=0;i--)
{
printf("%d",c.num[i]);
}
printf("\n");
}
int main()
{
int b;
while(scanf("%d",&b)!=EOF){
bign a;
a.num[0]=1;
a.len=1;
for(int i=b;i>0;i--)
{
a=multi(a,i);
}
print(a);
}
return 0;
}