解题思路,通常情况下,想法肯定是通过循环,把所给的数字直接通过for循环来全部乘起来,然后再从后往前遍历来数0的个数,理论来讲这个方法没毛病,但是问题是目前所知的数字有能存储1000的阶乘大小的类型吗,答案是否定的,然后问题就来了,那这问题应该怎么解决。
观察情况发现,如果末尾为0,则一定是2或者2的倍数与5所相乘得到的,纵观1到1000之间,2的倍数的数字太多态度,所以可以不用考虑,那问题就很简单了,直接转化为有多少个5可以用来除的问题。
这样的话问题就简单的多了,所以有时候解题需要换一个思路,不能硬刚,懂得变通才能更好的解决问题!
代码如下:
package www.light;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Created with IntelliJ IDEA
* Description:
* User:Light_Long
* Date:2019-07-12
* Time:12:34
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
int count = 0;
while (n / 5 != 0) {
n = n / 5;
count += n;
}
System.out.println(count);
}
}
//问题转化为求5的个数,因为2的数量有很多。