N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 49365 Accepted Submission(s): 13859
Problem Description
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
Author
JGShining(极光炫影)
Recommend
思路:这里涉及到大数操作,下面分析一下大数阶乘的原理:
如果结果只有一位数,我们就存放在str[0]中。
如果结果有两位以上,就牵涉到进位操作。
str[0]存放结果的个位数,str[1]存放十位数,str[2]存放百位数,str[3]存放千位数。
具体存放状态如下:(结果倒数输出)
/*
Title:HDU 1042
Author:Dojking
*/
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i, j, n, up, next;
while (scanf("%d", &n) != EOF)
{
string str;
str += '1'; //将 str[0] 初始化为1
up = 0; //up 表示进位
next = 0; //next 表示乘以下一个数后的总结果
for (i = 2; i <= n; ++i)
{
up = 0;
for (j = 0; j < str.length(); ++j)
{
next = (str[j]-'0') * i + up;
if (next > 9 && str[j+1] == '\0') //最后一位需要进位,则在末尾追加一个值为0的空间
str += '0';
str[j] = next % 10 + '0'; //当前位
up = next / 10; //进位
}
}
for (i = str.length()-1; i >= 0; --i) //逆序输出
cout<<str[i];
cout<<endl;
}
return 0;
}