链接
来源:牛客网
[编程题]末尾0的个数
输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2
输入描述:输入为一行,n(1 ≤ n ≤ 1000)
输出描述:输出一个整数,即题目所求
示例
输入
10
输出
2
解题思路:在我看到这道题后第一反应是用递归求出n的阶乘,然后用结果对10取余,得到尾数0的个数,然鹅我没有看到n是一个在1000以内数,用int定义变量的范围已经不够了,然后我把变量改成了long型。。。
结果显而易见,这道题压根不是有这样解的。
这道题真正的做法是:
因为只要求出阶乘后面有几个0就可以了,根本不需要知道阶乘的结果是多少,所以只要从怎么得到0来下手就能解决这道题,我们来找一下规律:
10 = 2*5;
10!= 3628800
20 = 4 *5;
20!= 2432902008176640000
可以发现有几个5就有几个0
而只有5的倍数里才有5,所以就成了找5的倍数,找到一个能被5整除的数就得到一个0,n的阶乘里有n个数相乘,而5最小的倍数就是5自己,所以1-4不用考虑,循环只要从n~5来对这个数循环对5取模,取模为0的数就是5的倍数,就能得到一个0;
代码:
import java.util.Scanner;
public class TheNumberOfZero {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int count = 0;
for (int i = n; i >= 5; i--) {
int tmp = i;
while (tmp%5==0) {
count++;
tmp /= 5;
}
}
System.out.println(count);
}
}