您的位置:首页 > 其它

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

2013-04-26 19:54 267 查看
点击打开链接

//

分析:

任何一个自然数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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: