题目来源:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1721
1721: 求阶乘(难度版)
时间限制: 5 Sec 内存限制: 64 MB题目描述
上一个求阶乘的题中相信大家都还能轻易解决,但是上一题中的n最大只给到了20,但是在很多地方中20的阶乘是远远不够的,现在,希望你能求出一个更大数的阶乘。
输入
第一行为一个整数t(1≤t≤10000). 接下来有t 行,每一行是一个数n (1≤n≤10000)。
输出
每行输出对应的n!
样例输入
4
1
2
3
4
样例输出
1
2
6
24
解析:类似高精度乘法就可以了
代码:
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n ;
cin >> n;
int Factorial[10000] = { 0 };
Factorial[1] = 1;
int digit = 1;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= digit; j++)
Factorial[j] *= i;
for (int j = 1; j <= digit; j++)
{
if (Factorial[j] > 9)
{
for (int r = j; r <= digit; r++)
{
if (Factorial[digit] > 9)
{
digit++;
}
Factorial[r + 1] += Factorial[r] / 10;
Factorial[r] %= 10;
}
}
}
}
for (int k = digit; k > 0; k--)
{
cout << Factorial[k];
}
cout << endl;
}
return 0;
}
/**************************************************************
Problem: 1721
User: 201730685257
Language: C++
Result: 正确
Time:0 ms
Memory:1484 kb
****************************************************************/