输入:输入有若干组,每组数据包含一个整数n(n<=10000)。
输出:n!的具体值。
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
//未改进算法const int maxn = 50000;
//改进后:因为int型的f[i]可以存9位数,所以数组f实际上只要20000就行了
const int maxn = 20000;
int n,c,k;
int f[maxn+1];
while(cin >> n)
{
memset(f,0,sizeof(f));
f[0] = 1;
for(int i = 1;i <= n;i ++)
{
c = 0;//代表进位
for( int j = 0; j <= maxn; j++)
{
int s = f[j] * i + c;
// f[j] = s % 10;
// c = s / 10;
// 改进后
f[j] = s % 100000;
c = s / 100000;
}
}
for(k = maxn; k >= 0; k--)
if(f[k] != 0)
break;
for(int j = k; j >= 0; j--)
cout<<f[j];
cout<<endl;
}
return 0;
}