http://ac.jobdu.com/problem.php?pid=1076
-
题目描述:
-
输入一个正整数N,输出N的阶乘。
-
输入:
-
正整数N(0<=N<=1000)
挺好一题目,因为是大数据,所以用代码模拟了大脑计算乘法的步骤,非常精巧
// 输入一个正整数N,输出N的阶乘
//1000的阶乘有2600位左右
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
int N, res[10000] = {0}; //正整数N(0<=N<=1000)
ifstream cin("data.txt");
while (cin >> N)
{
int i, j;
memset(res, 0, sizeof(res)); //内存空间初始化
res[0] = 1, res[1] = 1; //res[0]表示结果此时有多少位,初始为1位,res[1]为1表示阶乘的1*.....
for (i = 2; i <= N; i++)
{
for (j = 1; j <= res[0]; j++)
{
res[j] = res[j] * i;
}
for (j = 1; j <= res[0]; j++)
{
if (res[j] >= 10)
{
res[j + 1] += res[j] / 10;
res[j] = res[j] % 10;
if (j == res[0])//有进位,改变位数
res[0]++;
}
}
}
for (j = res[0]; j >= 1; j--)
cout << res[j];
cout << endl;
}//end of while
system("pause");
return 0;
}