求乙個十進位制數轉化成二進位制後bit為0或1的個數

2021-07-10 14:19:00 字數 798 閱讀 9548

求乙個十進位制數轉化成二進位制後bit為0或1的個數

1、首先解決bit為1的個數,函式如下:

int countonenum (int n)   

return

count;

}

2、求bit為0的個數,這種做法在複雜度上比(1)大,因為(1)的迴圈次數只與二進位制數中1的個數一樣,而下面演算法的時間複雜度為 log(n),函式如下:

int countzeronum (int n)   

n /= 2;

} return

count;

}

3、後來在網上看到乙個更為通用的解法,可以求十進位制數 x 換算成 n 進製後數為 k 的個數,其實這種做法就是將上面計算bit為0的個數的函式進行改造,使之更通用,演算法時間複雜度也為 log(n),函式如下:

int

count (int x , int n , int k)

x /= n;

} return num;

}

4、使用位操作的方法,此方法中迴圈次數與二進位制數字數一樣,函式如下

int num1 = 0;//bit位為1的個數  

int num0 = 0;//bit位為0的個數

void

count(int n)

else

n >>= 1;

} }

be better :)

十進位制轉化為二進位制

今天我們來實現乙個有趣的小案例。要求 任意輸入乙個正十進位制數把它轉化為二進位制數輸出。我這裡使用了遞迴演算法 def transit num,binary 十進位制轉化為二進位制 param num 輸入的10進製 return none if num 2 remainder num 2 num ...

java 十六進製制轉化成十進位制

問題描述 從鍵盤輸入乙個不超過8位的正的十六進製制數字串,將它轉換為正的十進位制數後輸出。注 十六進製制數中的10 15分別用大寫的英文本母a b c d e f表示。方法一 public class test1 system.out.println 十進位制的數是 s 注意 方法一直接呼叫系統方法...

13 3十進位制轉化為二進位制

05.檔名稱 07.完成日期 2013年 11月 08.版本號 v1.0 09.對任務及求解方法的描述部分 遞迴 10.輸入描述 十進位制 11.問題描述 遞迴法做二進位制轉換 12.程式輸出 二進位制 13.問題分析 像張玉老師說的像剝洋蔥先找到芯,在寫出第n 1或n 1與n 2與第n項的關係就很...