题目1076:N的阶乘
时间限制:3 秒
内存限制:128 兆
特殊判题:否
提交:3031
解决:932
-
题目描述:
-
输入一个正整数N,输出N的阶乘。
-
输入:
-
正整数N(0<=N<=1000)
-
输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
-
样例输入:
-
4 5 15
-
样例输出:
-
24 120 1307674368000
-
来源:
- 2006年清华大学计算机研究生机试真题
-
- MYCode
-
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int result[ 1010][ 3010];
void init()
{
memset(result, 0, sizeof(result));
result[ 0][ 0] = 1;
result[ 0][ 1] = 1;
result[ 1][ 0] = 1;
result[ 1][ 1] = 1;
int i, j;
for(i = 2; i <= 1000; i++)
{
int len = result[i - 1][ 0];
int cur = len;
for(j = 1; j <= len + 5; j++)
{
result[i][j] += result[i - 1][j] * i;
if(result[i][j] >= 10)
{
result[i][j + 1] += result[i][j] / 10;
result[i][j] %= 10;
if(j + 1 > cur)
cur = j + 1;
}
}
result[i][ 0] = cur;
}
}
int main()
{
int n;
init();
while(scanf( "%d", &n) != EOF)
{
//cout<<"len= "<<result[n][0]<<endl;
int i;
for(i = result[n][ 0]; i >= 1; i--)
{
cout << result[n][i];
}
cout << endl;
}
}
-