题目:末尾0的个数
输入一个正整数n,求n!(即阶乘)末尾有多少个0。
最简单的思路就是输入一个正整数,先求出它的阶乘,然后求其末尾有多少个0,但是这种方法会产生溢出,所以在此给出另一种方法。
我们在计算n的阶乘时,实际上就是把所有小于等于n的正整数分解成质因数,然后再将其乘到一起,那么末尾0的个数实际上就是2*5的个数,而2的个数明显是很多很多的,所以问题就转化成了5的个数。
而只有5的倍数才有5这个因数,所以问题就简化为小于等于n的数中有多少个数是5的倍数,当然对于25,125等含有多个因子5的数要单独考虑。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(),result=0;
for(int i=5;i<=n;i*=5){
result+=n/i;
}
System.out.println(result);
}
}