[ACM] hdoj1042 N! 解题报告
来源:互联网 发布:plc模块化编程实例 编辑:程序博客网 时间:2024/05/19 03:29
题目传送门
hdoj1042
题目大意
计算n!,其中n的取值范围为0 <= n <= 10000。
解题思路
10000!结果的位数可以通多hdoj1018计算出来,其结果为35660位,因此,本题为大数乘法运算。
可采用模拟手算的方法计算该题目。
解题代码
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){int i, j;int n;int len;int num[36000]; // 存储计算结果的数组while(scanf("%d", &n) != EOF){memset(num, 0, sizeof(num));num[0] = 1;num[1] = 1;for(i = 2; i <= n; i++){len = num[0];for(j = 1; j <= len; j++){num[j] *= i; //每一位乘以i}for(j = 1; j <= num[0]; j++){if(num[j] > 9) //进位{num[j + 1] += num[j] / 10;num[j] = num[j] % 10;}if(num[num[0] + 1] != 0) //乘积位数扩展{num[0] += 1;}}}for(i = num[0]; i > 0; i--){printf("%c", num[i] + '0');}printf("\n");}return 0;}/*****************************@problemID :1042*@language :C++*@Exe.Time :2652ms*@Exe.Memory:1748k*@Code.Len :659B*****************************/
注意
1.乘积在数组中存储的为逆序,即个位在最前面,输出时需要逆序。
0 0
- [ACM] hdoj1042 N! 解题报告
- ACM练习之hdoj1042《N!》
- hdoj1042 N!
- HDOJ1042 N!
- hdoj1042(N!,大数乘)
- N的阶乘HDOJ1042
- ACM--HDOJ2005解题报告
- ACM--HDOJ2503解题报告
- ACM--HDOJ2004解题报告
- ACM--HDOJ2502解题报告
- ACM--HDOJ2031解题报告
- ACM--HDOJ1201解题报告
- ACM解题报告
- ACM解题报告
- ACM-FZOJ1011解题报告
- ACM解题报告 POJ1012
- acm-poj1068解题报告
- acm-poj1051解题报告
- C#中的反射
- Linux中select poll和epoll的区别
- 编程学习
- ELB架构下,在APACHE如何获取客户端IP
- 編程之美2.9:神奇的菲波那契數列
- [ACM] hdoj1042 N! 解题报告
- SAP,IBM,AC实施之比较
- 课程笔记 10:数据结构(清华) 栈
- 斯坦福大学自然语言处理第七课“情感分析(Sentiment Analysis)
- 倒序输出(如输入456则输出654)
- vagrant 创建box 镜像
- 小白学开发(iOS)OC_匿名对象(2015-07-24)
- HDU 2674-- N!Again【技巧】
- 猜数游戏