原题:
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
解题思路:- 建立一个整形数组sum[],每个数组元素存五位数,大于五位的 num/100000进位,num%100000存起来(可以理解为万进制)
- 最后就是格式必须把空缺的0给补上,可用“%05d”,最高位不用补0。
代码:
#include <stdio.h> #include <cstring> int sum[50000]; //每个元素存5位数字 void NNNN(int N) //N阶层计算 { int CarryBit; //进位数字 int num; int i; //阶层数 int j; int k = 0; //数组sum已拥有有效的元素 数目 for (i = 1; i <= N; i++) //阶层 { CarryBit = 0; for (j = 0; j <= k; j++) { num = sum[j] * i + CarryBit; if (num > 99999) //数目是否超过5位 { CarryBit = num / 100000;//取整得进位 } else { CarryBit = 0; } sum[j] = num % 100000; //取余 //最高位的时候,也有进位,则需扩展k值 if (j == k && CarryBit != 0) { k++; sum[k] = CarryBit; break; } } } //输出 for (i = k; i >= 0; i--) { if (i == k) { printf("%d", sum[i]); } else { printf("%05d", sum[i]); } } printf("\n"); } int main() { int N; while (scanf("%d", &N)!=EOF) { if (N < 0)continue; memset(sum, 0, sizeof(sum)); sum[0] = 1; //初始值为1(乘法) NNNN(N); } }