51Nod 1003 阶乘后面0的数量 | 2018郑州大学ACM实验室夏季集训 热身赛E题

 

前几天做的热身赛中的一道题,觉得思路还是挺有意思的,po一下。

 


题目:

1003 阶乘后面0的数量

基准时间限制:1 秒 空间限制:131072 KB 分值: 5  难度:1级算法题


n的阶乘后面有多少个0?

6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0。

Input

一个数N(1 <= N <= 10^9)

Output

输出0的数量

 

Input示例

5

Output示例

1


 

解题:

当时看到题,为了追求时间,没有仔细考虑题目条件,就直接上 暴力穷举,用了两个for,一个求n!一个判0。

但是实际上是绝不对的,因为体中的条件是 1 <= N <= 10^9,先不说时间超限问题,就当 n=1e9时n!就无法存储,远远超限。

所以第一次,果不其然 Time Limit Exceed。

 

所以,便开始考虑用其他的简便算法。

其实题目中 说:“720后面有1个0”以及是暗含了一个隐含条件 —— 只有当相乘因子中有“5”才会在末尾出现0;

所以此题就可以很好的转化为计算 n!中可以化出 5的次幂是多少。

 

代码实现,10行代码:

 

#include <stdio.h>

int main()

{

    long long int a,b;

    scanf("%lld",&a);

    for(b=0;a>=5;a/=5){

        b+=a/5;

    }

    printf("%d\n",b);

    return 0;

}

 

全部评论

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务