读书人

Baidu笔试题

发布时间: 2012-02-23 22:01:34 作者: rapoo

求助:Baidu笔试题,。。。。。
对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。
如:18!=6402373705728000,尾部连续0的个数是3。
(不用考虑数值超出计算机整数界限的问题)

请牛人解答。。。



[解决办法]
原先的思路有点麻烦 这是比较简单的 LOG5(N)的算法

#include <stdio.h>
void main()
{
int n,pow5,result=0;
scanf("%d",&n);
for(pow5=5;n>=pow5;pow5*=5)
{
result+=n / pow5;
}
printf("%d\n",result);
getchar();
getchar();
}
[解决办法]
如果输入的是long 型变量 做相应调整
#include <stdio.h>
void main()
{
long n,pow5,result=0;
printf("Input N:");
scanf("%ld",&n);
for(pow5=5;n>=pow5;pow5*=5)
{
result+=n / pow5;
}
printf("%ld \n",result);
getchar();
getchar();
}

读书人网 >软件架构设计

热点推荐