1. 程式人生 > >演算法題:求N!末尾0的個數和求二進位制數中1的個數

演算法題:求N!末尾0的個數和求二進位制數中1的個數

1、給定一個整數,那麼N的階乘N!末尾有多少個0呢?

解題思路:N!=K*10^M,M的值即為N!末尾0的個數。又10^M=(2^M)*(5^M),因為一個數進行質因數分解後,2出現的概率比5大得多。所以只有計算出1到N包含多少個5的因子

public class demo2 {

	public static void main(String[] args) {
		int j = 0,ret = 0;
		System.out.println("請輸入一個數:");
		Scanner input = new Scanner(System.in);
		int N = input.nextInt();
		for (int i = 1; i <= N; i++) {
			j = i;
			while(j%5==0){
				ret++;
				j /=5;
			}			
		}
		System.out.println(N + "的階乘末尾零的個數:" + ret);
	}
}
執行結果:請輸入一個數:
10
10的階乘末尾零的個數:2

2、求二進位制數中1的個數

解題思路:二進位制數除以2,若整除則原來的二進位制數會減少一個0,若有餘數,則表示當前位置有一個0,故通過二進位制數除以2判斷餘數來求

	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("請輸入任意數:");
		int v = s.nextInt();
		System.out.println("二進位制中1的個數為:"+count(v));
	}
	private static int count(int v) {
		// TODO 自動生成的方法存根
		int num = 0;
		while(v!=0){
			if(v%2==1){
				num++;
			}
			v = v /2;
		}
		return num;
	}
}
執行結果:請輸入任意數:
565
二進位制中1的個數為:5