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