1. 程式人生 > >求一個數的階乘中0的個數

求一個數的階乘中0的個數

求一個數的階乘中0的個數

連續幾天產出為負,再不寫點東西沒法交代了。。。

public class The_number_of_0_in_FactorialN {

	public static void main(String[] args) {
		int n=5;
		System.out.println(Number0(n));
		System.out.println(Number1(n));
	}
	//階乘中有多少0,如果N!=K*(10~m),K是一個不能被10整除的數,那麼m有多少個就有多少個0
	//N!進行質因數分解N!=(2~x)*(3~y)*(5~z)···,由於只有2*5=10,所以可以看有多少對
	//2和5,就有多少個0,M=min(x,z),而能被2整除的比能被5整除的多,M=z
	public static int Number0(int n) {
		int number=0,j=1,i;
		while(j<=n) {
			i=j;
			if(i%5==0) {
				i=i/5;
				number++;
			}
			j++;
		}
		return number;
	}
	//這種方法是直接計算5的數量,因為2是充足的,每隔5個,會有一個0,比如5,10,15,20,...
	// 每隔5X5,會多產生一個0,比如25,50,75,...(這裡的5只在上一種情況算了一個5,因此在這裡加上25=5*5上次只算了一個5)
	//每隔5X5X5又會多出一個0,和第二個同理
	//	 ...然後就是每次查5啦
	public static int Number1(int N) {
		int number=0;
		while(N>0){
			number+=N/5;
			N/=5;	
		}
		return number; 
	}	
}