刷题-计算阶乘(大数的存储)
题目来源:http://47.106.114.75/problem/558
题目描述:
Problem Description
给定一个整数N(0 ≤ N ≤ 10000),要求计算N的阶乘。
Input
每个N占一行,直到文件尾。
Output
对于每个N,输出N的阶乘,占一行。
Sample Input
1
2
3
Sample Output
1
2
6
代码:
#include <stdio.h>
int main()
{
int i, j,k;
int N;
while(~scanf("%d/n",&N))
{
int a[50000];//用数组存值,阶乘的值为大数
memset(a,0,sizeof(a)); //数组初始化
a[0] = 1;
int digit = 1;// 结果的位数
int up =0; //进位
int temp;
for(i = 2; i <= N; i++) //求阶乘
{
for(j = 0; j < digit; j++) //当前值的每一位乘阶乘的数,例如13*8->3*8->1*8+2
{
temp = a[j] * i + up;
a[j] = temp % 10;
up = temp / 10;
}
while(up) //如果最高位有进位,将最高位存入
{
a[digit] = up % 10;
up = up / 10;
digit++;
}
}
for(i = digit - 1; i >= 0 ;i--)
{
printf("%d",a[i]);
}
printf("\n");
}
}