首页 > 代码库 > codechef Factorial 算法 fread读入数据

codechef Factorial 算法 fread读入数据

和很多oj一样都有的经典题目,就是求阶乘的尾零有多少个。

这就不能直接求阶乘的值。而是直接求5的倍数的个数就可以了。

数据量很大,有100000个,所以这里使用buffer,调用fread函数,可以大大加速程序。比一般的读写操作快10倍左右呢。

原题:

http://www.codechef.com/problems/FCTRL


#include <stdio.h>

unsigned facZeros(unsigned n)
{
	unsigned ans = 0;
	for (unsigned i = 5; n / i; i *= 5)
	{
		ans += n / i;
	}
	return ans;
}

int Factorial()
{
	unsigned T, c = 0, zeros = 0, num = 0;
	scanf("%u\n", &T);
	char buffer[100000];
	while ((c = fread(buffer, 1, 100000, stdin)) > 0)
	{
		for (unsigned i = 0; i < c; i++)
		{
			if (buffer[i] == ‘\n‘)
			{
				printf("%u\n", facZeros(num));
				num = 0;
			}
			else
			{
				num = num * 10 + buffer[i] - ‘0‘;
			}
		}
	}
	if (0 != num) printf("%u", facZeros(num));
	return 0;
}