51Nod 1003 阶乘后面0的数量 | 2018郑州大学ACM实验室夏季集训 热身赛E题
前几天做的热身赛中的一道题,觉得思路还是挺有意思的,po一下。
题目:
基准时间限制: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;
}