思路:
由于要求1000!,其结果不能够用integer类型或者Long类型存在,所以不可能先将结果计算出来,在依次判断结果中存在的0的个数。
这里提供了另外一种思路,参考博客(https://blog.csdn.net/sata1/article/details/29228661):
对1000!进行因式分解,假如有k个0,即10k,分解2k*5^k,由于1000!分解中2的个数多于5的个数,所以我们只要求出1000!分解中5出现的次数,就是末尾0的个数。
可知被1-1000中能被5整除的数,都至少能分解出一个5,甚至可分解出两个5(例如:25,50,75…),三个5(例如:125,250,375,…),四个5(例如:625)
我们只要求出被5整除的数中5的个数,就可以了。
代码:
public class Test1 {
public static void main(String[] args) {
int count=getZero();
System.out.println(count);
}
private static int getZero() {
int sum=0; //1000!中分解5的个数
for(int i=5;i<=1000;i+=5){
int num=i; //当前被5整除的数
while(num%5==0){
num/=5;
sum++;
}
}
return sum;
}
}
运行结果: