摘要:圖解第二種算法圖解代碼示例算法如果為真,說明拿到的是二進制序列的個數(shù)為算法為的時候說明已經(jīng)拿完了,循環(huán)終止二進制序列中的個數(shù)以上代碼,還可做優(yōu)化在此僅作參考,若有更好的算法,還望能夠私信告知,多謝各位。
算法是一個程序員的內(nèi)功,能很好的體現(xiàn)程序員的編程思維,通過學習和掌握常見的算法,不僅能提高coding能力,還能更加容易在筆面試中脫穎而出。本專欄將記錄博主刷算法題的過程,不定期的會更新一些優(yōu)質(zhì)的算法題。如果對大家有幫助,別忘了三連支持喲!
目錄
?:
?
??途W(wǎng)題目鏈接:二進制中1的個數(shù)
?:這題在我們分析后會發(fā)現(xiàn)題目的難點在于,我們要如何在二進制補碼序列中找到1并記錄1的個數(shù)。在這里我提供兩種算法來解決這個難點。
?? ? 1:我們知道一個數(shù)按位與上1得到的結(jié)果是除最低位外其它位全部變成0,那么我們可以說一個數(shù)按位與上1得到的結(jié)果是最后1位,那么我們可以通過按位與操作與右移操作,將二進制序列的每一位都拿下來再判斷是不是1即可解決問題。
? ? ? ? 2:我們知道二進制序列肯定會存在最后一個1,那么如果我讓這個數(shù)減一,原來的最后一個1的位置上會變成0,而原本在這最后一個1后面為0的位置上會出現(xiàn)1,那么如果我讓這個數(shù)按位與本身減一就會把最低位的1去掉,每一次進行這樣的操作就會少一個1,同樣的也能夠計算出1的個數(shù)。
?:圖解
?
#includeint main(){ int n = 0; scanf("%d", &n); int i = 0; int count = 0; while (i < 32) { if ((n >> i) & 1)//如果為真,說明拿到的是1 { count++; } i++; } printf("二進制序列1的個數(shù)為:%d", count); return 0;}
#includeint main(){ int n = 0; scanf("%d", &n); int count = 0; while (n)//n為0的時候說明1已經(jīng)拿完了,循環(huán)終止 { n &= (n - 1); count++; } printf("二進制序列中1的個數(shù):%d", count); return 0;}
以上代碼,還可做優(yōu)化在此僅作參考,若有更好的算法,還望能夠私信告知,多謝各位。
由于本人水平十分有限,若有錯誤請即使告知!如果有幫助別忘了,萬分感謝。
點贊?? ? ? ? ?收藏?? ? 關(guān)注?
?
?
?
?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/118806.html
摘要:問題描述輸入一個整數(shù),輸出該數(shù)二進制表示中的個數(shù)。其中負數(shù)用補碼表示。思路方法將二進制變成字符數(shù)組,遍歷數(shù)組統(tǒng)計的個數(shù),這種辦法不需要考慮正負數(shù)。遍歷字符數(shù)組,統(tǒng)計的個數(shù)判斷該位是否是,如果是就,否則執(zhí)行下一次循環(huán)。的二進制表示想右移一位。 1.問題描述 輸入一個整數(shù),輸出該數(shù)二進制表示中1的個數(shù)。其中負數(shù)用補碼表示。 2.思路 方法1:將二進制變成字符數(shù)組,遍歷數(shù)組統(tǒng)計1的個數(shù),這...
摘要:題目輸入一個整數(shù),輸出該數(shù)二進制表示中的個數(shù)。其中負數(shù)用補碼表示。二進制與運算符符號為,表示若兩個二進制位都為,則結(jié)果為,否則為。所以用于比較的這個數(shù)字初始值為,比較完后讓左移位,這樣就可以依次比較所有位是否為。 題目 輸入一個整數(shù),輸出該數(shù)二進制表示中1的個數(shù)。其中負數(shù)用補碼表示。 分析 這是一道考察二進制的題目 二進制或運算符(or):符號為|,表示若兩個二進制位都為0,則結(jié)果為0...
摘要:劍指系列刷題第一篇題目來源數(shù)組中數(shù)字出現(xiàn)的次數(shù)大家可以去測試一下自己的代碼博主碼云鏈接文章目錄前言題目描述解題思路解題代碼前言這是劍指系列刷題第一篇文章,大家可以互相學習一下。其中的兩個單身狗是和。 ...
摘要:導航小助手劍指從尾到頭打印鏈表題目詳情解題思路源代碼總結(jié)劍指從尾到頭打印鏈表題目詳情輸入一個鏈表的頭節(jié)點,從尾到頭反過來返回每個節(jié)點的值用數(shù)組返回。時間復雜度方法先反轉(zhuǎn)鏈表并求長度,在將反轉(zhuǎn)后的鏈表數(shù)據(jù)拷貝至數(shù)組中。 ...
閱讀 1685·2021-11-19 09:40
閱讀 2939·2021-09-24 10:27
閱讀 3227·2021-09-02 15:15
閱讀 1888·2019-08-30 15:54
閱讀 1213·2019-08-30 15:54
閱讀 1376·2019-08-30 13:12
閱讀 642·2019-08-28 18:05
閱讀 2808·2019-08-27 10:53