一道大数阶乘的题,刚开始写了个程序,tle,,,后来稍微优化了一下,跑了1500多ms,,,据说还可以优化很多,,算法真的是博大精深啊。。。题目:
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
One N in one line, process to the end of file.
Output
For each N, output N! in one line.
Sample Input
1 2 3
Sample Output
1 2 6
ac代码:
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int a[50000]={0},i,j,digit=1;
a[0]=1;
for(i=2;i<=n;++i)
{
int count;
for(j=1,count=0;j<=digit;++j)
{
int s=a[j-1]*i+count;
a[j-1]=s%10;
count=s/10;
}
while(count)
{
a[++digit-1]=count%10;
count/=10;
}
}
for(i=digit;i>=1;i--)
{
cout<<a[i-1];
}
cout<<endl;
}
return 0;
}
我再看看还能怎么优化