hdu 1124(数论,求末尾0的个数)

点击打开链接


//

分析:

任何一个自然数N都可以因式分解   n=2^a*3^b*5^c...=10^c*2^(a-c)*3^b...

又因为值较小的幂值一定大于值较大的幂值,所以a-c>0,所以只需要求出其中5的幂值就可以求出末尾有几个0了。。

N=26,阶乘中包含因数5、10、15、20、25,可知5的幂次为6。5=5*1,10=5*2,15=5*5,20=5*4,25=5*5,求解时用26/5=5,

再用5/5=1,再用1/5=0,所以总幂次为5+1+0=6。为什么可以这样求?在N!中数是连续增加的,5也是以其倍数渐进增加,一直增加到不大于N且是5的整数倍的最大整数。

这样一来就可以用N/5来确定出现多少个5了。当然,这还不够。比如26/5=5,与其幂次为6不符!原因在于25=5*5,其中含有2个5!所以,又有了紧接着的5/5=1,1/5=0了。


#include"stdio.h"
#include"string.h"
int main()
{
	int i,a;
	int ans,n;
	while(scanf("%d",&n)!=-1)
	{
		for(i=0;i<n;i++)
		{
			ans=0;
			scanf("%d",&a);
			while(a)
			{
				ans+=a/5;
				a/=5;
			}
			printf("%d\n",ans);
		}
	}
	return 0;
}
		


你可能感兴趣的:(hdu 1124(数论,求末尾0的个数))