刷题-计算阶乘(大数的存储)

题目来源: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");
	}
}
posted @ 2020-12-07 22:24  张宵  阅读(289)  评论(0编辑  收藏  举报