/*
题目描述
输入一个正整数N,输出N的阶乘。
输入
正整数N(0<=N<=1000)
输出
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入
0
4
7
样例输出
1
24
5040
*/
题目链接:http://codeup.cn/problem.php?cid=100000593&pid=1
#include<stdio.h>
#include<string.h>
struct bign
{
int d[4000];
int len;
bign()
{
len=0;
memset(d,0,sizeof(d));
}
};
bign table[1002];
//高精度与低精度乘法
void multiply(bign a,int b,bign &c)
{
int i,carry=0;
for(i=0;i<a.len;i++)
{
int temp=a.d[i]*b+carry;
c.d[c.len++]=temp%10;
carry=temp/10;
}
while(carry!=0)//进位可能不止一位
{
c.d[c.len++]=carry%10;
carry/=10;
}
}
void makeTable(bign t[])
{
int i=0;
for(i=1;i<=1000;i++)
{
multiply(t[i-1],i,t[i]);//t[i]=t[i-1]*i; 即n!=(n-1)!*n
}
}
int main()
{
int n;
table[0].d[0]=1;
table[0].len=1;
makeTable(table);
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=table[n].len-1;i>=0;i--)
printf("%d",table[n].d[i]);
printf("\n");
}
return 0;
}