n!是一个乘法,根据乘法的交换律和结合律,我们可以知道,只要出现一个5,结尾必然就会有一个0,因为2的个数肯定比5多,所以每出现一个5,结尾就会多一个0.代码实现过程如下:
public class AliAlo {
public static void main(String[] args) {
AliAlo alo=new AliAlo();
System.out.println(alo.getNumberOfZero(100));
}
/**
* 计算n!末尾有多少个0
* @param num
* @return
*/
public int getNumberOfZero(int n){
if(n<5){
return 0;
}
int result=0;
int closeN=getClosedN(n);
for(int i=5;i<=closeN;i+=5){
result+=getMiOfFive(i);
}
return result;
}
/**
* 获取到最接近n的5的倍数
* @param num
* @return
*/
private int getClosedN(int n){
int a=n/5;
return a*5;
}
/**
* num=Math.pow(5,result)+q 或者给定的数字是由多少个5组成
* @param num
* @return
*/
private int getMiOfFive(int num){
int epson=num/5;
int result=1;
while(epson>=5){
result+=1;
epson=epson/5;
}
return result;
}
/**
* 计算n!
* @param n
* @return
*/
public float getNumber(int n){
float result=1;
if(n==0){
return result;
}else{
int i=n;
while(i>0){
result=result*i;
i=i-1;
}
}
return result;
}
}