[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
原创粉丝点击