一个数的阶乘结果尾部会有多少个0?
这个只是个稍微有点意思的面试题,亦或者是笔试题!
很多人下意识就会想到,我们先把这个阶乘的结果计算出来,然后看一下末尾有多少个0不就行了吗?但是阶乘的结果一般会比较大,很容易就会越界的,所以这个方法是不可行的。
首先,我们拿到这个问题的第一个想法,0是哪里来的?这个0肯定是0*5得来的。那么问题就归结于有多少对2和5。经过简单的思考我们就可以得出这里面肯定是5的个数少一些。那么这个问题就转化了呀!就转化成了从1到这个数的这个数列。里面一共有多少个因子5。
那么我们首先将从1到n这个数列列一下!1,2,3,4,5,6,7,8,9,10,11,12 …….n。如果这个数可以提供5这个因子那么就说明这个数一定是5的倍数。所有可以被5整除的可以提供一个5。所有可以被25整除的都可以提供2个5。那么计算5的个数也就简单了。
我们计算的时候,一直到5m>n,就可以了。因为所有可以被25整除的都是可以被5整除的所以计算过一次了。所以25提供的2个5已经被计算过一次了。
结果sum=n/5 + n/52 + n/53 + …… + n/5m
那么代码也就很好写了吧!
package example;
public class ZeroEndOfNumber {
public static void main(String[] args) {
int test = test(10);
System.out.println("test = " + test);
}
public static int test(int n){
if(n < 0){
return 0;
}
int res = 0;
while (n !=0){
res += n /5;
n = n/5;
}
return res;
}
}
这个关于阶乘的结果尾部有多少个0的问题就也就解决了呀!问题不是很难,方法也不只这一个,欢迎交流!然后最后就是GitHub地址了:https://github.com/yunzhifei/mavenalgorithm.git