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

2022-05-30 20:06:12 字數 898 閱讀 2330

#includeusing

namespace

std;

int count1(int

a);int count2(int

n);int count3(int

n);int

main()

int count1(int

a)

return

num;

}int count2(int n)

return

num;}/*

前兩個解決方法的時間複雜度均為log2v,log2v為二進位制數的位數

解法三的時間複雜度只與「1」的個數相關

*/int count3(int n)

return

num;

}

用空間換取時間的解法:把0~255中「1」的個數直接儲存在陣列中,整數v作為陣列的下標,counttable[v]就是v中1的個數。演算法的時間複雜度為o(1)。

在乙個需要頻繁使用這個演算法的應用中,通過「空間換取時間」來獲取高的時間效率是乙個常用的方法,具體的演算法還應針對不同的應用進行優化。

擴充套件問題: 兩個整數(二進位制表示)a和b,問把a變為b需要改變多少位?即為求a和b的二進位制表示中有多少位是不同的?

#includeusing

namespace

std;

int count1(int a,int

b);int

main()

int count1(int a,int

b);

a=a/2

; b=b/2

; }

return

num;

}

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

對於乙個位元組 8 bit 的無符號整形變數,求其二進位制表示中 1 的個數,要求演算法的執行效率盡可能高 解法一 通過整形資料除法的特點,通過相除和判斷餘數的值來分析。int count byte v v v 2 return num 解法二 使用位操作。向右移位操作同樣可以達到相除的目的。唯一不...

求二進位制數中1的個數

解法一 可以舉乙個八位的二進位制例子來進行分析。對於二進位制操作,我們知道,除以乙個2,原來的數字將會減少乙個0。如果除的過程中有餘,那麼就表示當前位置有乙個1。以10 100 010為例 第一次除以2時,商為1 010 001,余為0。第二次除以2時,商為101 000,余為1。因此,可以考慮利用...

求二進位制數中1的個數

對於乙個位元組 8bit 的變數,求其二進位制表示中 1 的個數,要求演算法的執行效率盡可能地高。解法一 可以舉乙個八位的二進位制例子來進行分析。對於二進位制操作,我們知道,除以乙個2,原來的數字將會減少乙個0。如果除的過程中有餘,那麼就表示當前位置有乙個1。int count int v int ...