题目描述:
很多人的第一想法应该是接收这个数字,先计算阶乘,然后判断末尾有几个0,但是这种方法不对,因为整形接收不了很大的数字,就会导致最后只能通过很少的测试用例。
正确做法思路:
10进制结尾的每一个书代表这个数有一个因数10存在,10可以分解成2×5,因此只有2和5这两个质数相乘才能得到末尾是0的数字,并且2和5相乘只能产生一个0。所以,分解后的因式中有多少对2×5则末尾就有多少个0。并且分解结果中2的个数多与5的个数,所以最后计算可以分解为多少个5即可。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int num = 0; //用来计数,有多少个5
while (n >= 5) {
int tmp = n;
while (tmp % 5 == 0) {
num++;
tmp/=5;
}
n--;
}
System.out.println(num);
}
}
}