HDU 1042

来源:互联网 发布:surface studio 知乎 编辑:程序博客网 时间:2024/05/21 15:06

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
123
 

Sample Output
126
 

Author
JGShining(极光炫影)
 

Recommend
We have carefully selected several similar problems for you:  1715 1047 1063 1753 1316 
 

Statistic | Submit | Discuss | Note

思路:这里涉及到大数操作,下面分析一下大数阶乘的原理:

如果结果只有一位数,我们就存放在str[0]中。

如果结果有两位以上,就牵涉到进位操作。

str[0]存放结果的个位数,str[1]存放十位数,str[2]存放百位数,str[3]存放千位数。

具体存放状态如下:(结果倒数输出)


/*Title:HDU 1042Author: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;}

0 0
原创粉丝点击