演算法題:求N!末尾0的個數和求二進位制數中1的個數
阿新 • • 發佈:2018-10-31
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