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