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
思路:这里涉及到大数操作,下面分析一下大数阶乘的原理:
如果结果只有一位数,我们就存放在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
- HDU 1042
- hdu 1042
- hdu 1042
- hdu 1042
- HDU 1042
- HDU 1042
- HDU 1042
- hdu 1042
- hdu 1042
- hdu 1042
- hdu 1042
- HDU 1042
- HDU-1042
- hdu 1042
- HDU 1042
- HDU 1042
- N! ---HDU 1042
- HDU 1042 N!
- Java 自动装箱和拆箱
- 分享C++基础和MFC编程的优秀学习资料
- Spring Security教程(2)----SpringSecurity简单测试
- Lua在Linux下的安装
- Spring Security教程(3)---- 自定义登录页面
- HDU 1042
- 二叉排序树删除的一点思考
- Spring Security教程(4)---- 数据库表结构的创建
- 【我所认知的BIOS】—> Advanced Configuration and Power Interface 原理(实践部分)
- 黑马程序员——JAVA集合框架(二)
- IOS设计模式之四: (备忘录模式,命令模式)
- Spring Security教程(5)---- 国际化配置及UserCache
- C++ 值传递、指针传递、引用传递详解
- ThreadSafe:诊断并发问题的利器