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; }}