[编程题]-末尾0的个数
【解题思路】:
任意挑选几个数字进行分解质因数,例如:
6 = 2*3
15 = 3*5
64 = 2*2*2*2*2*2 = 2^6
100 = 2^2 * 5^2
576 = 2^6 * 3^2
那么我们在计算
n
的阶乘时,实际上就是把所有小于等于
n
的正整数分解成质因数,然后再将其乘
到一起,那么末尾
0
的个数实际上就是
2*5
的个数,而
2
的个数明显是很多很多的,所以
问题就转
化成了
5
的个数
。
而只有
5
的倍数才有
5
这个因数,所以,问题就进一步简化为小于等于
n
的数中有多少个数是
5
的倍
数,当然
25
的倍数,
125
的倍数,
625
还要单独考虑。
【示例代码】:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int res = 0;
for(int i = n; i >= 5; i--) {
int tmp = i;
while(tmp % 5 == 0) {
res++;
tmp /= 5;
}
}
System.out.println(res);
}
}