------------只要够努力,人生最坏的结局不过是大器晚成!!!

链接:https://www.nowcoder.net/acm/contest/75/E
来源:牛客网

时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给定一个整数N(0≤N≤10000),求取N的阶乘

输入描述:

多个测试数据,每个测试数据输入一个数N

输出描述:

每组用一行输出N的阶乘
示例1

输入

1
2
3

输出

1
2
6

思路:就是一个大数阶乘问题,就是数据有点大,可能无法确定数组大小,可以用斯特灵公式计算n最大是阶乘的位数,避免越界,类似的求阶乘位数例题:http://www.cnblogs.com/zhumengdexiaobai/p/8409127.html

#include <stdio.h>

void jiecheng(int a[37000], int n, int *len){
	int i, j, q = 0;
	int alen = *len;
	alen = 1;
	a[0] = 1;
	for(i = 1; i <= n; i++)
	{
		for(j = 0; j < alen; j++)
		{
			a[j] = a[j] * i + q; 		
			q = a[j] / 10;
			a[j] = a[j] % 10;
		}
		while(q > 0){
			alen++;
			a[j]= q % 10;
			q = q / 10;
			j++;
		}
		
	}
	*len = alen;
}


int main(){
	int a[37000], n, i, len;  //位数不会超过3600 
		
	while(scanf("%d", &n) != EOF){
		if(n == 0)
			printf("0\n");
		else{
			jiecheng(a, n, &len);
			for(i = len - 1; i >= 0; i--)
				printf("%d", a[i]);
			printf("\n");
		}
		
	}
	return 0;	
} 

  

posted on 2018-02-04 22:46  ystraw  阅读(188)  评论(0编辑  收藏  举报

不经一番切孤寒,怎得梅花扑鼻香