除2取餘法

2021-10-05 14:06:02 字數 1376 閱讀 8398

要求:

給乙個十進位制數n,求出n二進位制各個數字的和

方法:

除以2取餘法,將值相加即可

#include

using

namespace std;

intmain()

cout << ans << endl;

return0;

}

eg: 6=110,有2個1; 1023=1111111111,有10個1。

如果把每位的數值做標記:

定義temp變數,在處理個位的時候值為1,迴圈結束後乘2

temp的值依次變為1,2,4,8,16…

temp也可以表示別的意義,如:處理個位的時候為0,迴圈結束後加1,這樣就是求該位2的乘方的形式

eg:45=25+23+23+20

#include

using

namespace std;

intmain()

cout << ans << endl;

return0;

}

例題:

題目描述

b市的工人們天天抱著腦袋,因為食品生產線上,他們用0和1來表示是否新增原料,而原料的種類,總計多達20種……

更頭疼的是,電路板上的數字,對於工人來說是乙個不小的難題。電路板上的led螢幕總是把0和1的資料,轉化成乙個十進位制的數,於是每次,工人們就會天天計算12039這種數字的二進位制位,這讓工人們很頭疼

對於乙個數字x(0輸入

乙個數字x,表示led螢幕的數字

輸出

乙個等式,x=ei+ej+ek+…+e0,其中,ei,ej,ek….是從大到小的2的乘方

樣例輸入

樣例輸出

43=32+8+2+1

#include

#include

using

namespace std;

intmain()

x /=2

; temp *=2

;}cout << num <<

'=';

for(

int i = v.

size()

-1; i >=

1; i--

) cout << v[0]

<< endl;

return0;

}

PTA 雜湊查詢 除留取餘法

pta 聊天狂人 25 分 給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格...

求質數 之 除餘法 C語言描述

這個問題可以有兩種解法 一種是用 篩子法 另一種是從 2 n 逐一檢測出質數。如果要了解 篩法 請看另一篇文章 求質數 之 篩法 現在來介紹第二種方法。用這種方法,最先想到的就是讓從2 n逐一檢查。如果是就顯示出來,如果不是,就繼續檢查下乙個直到超出範圍 n。這是正確的做法,但效率卻不高。當然,2 ...

資料結構 雜湊表(除留取餘法 鏈位址法)

include using namespace std 雜湊函式的構造方法 除留取餘法 typedef struct node node typedef struct hash table hash table 初始化雜湊表 hash table inithashtable 在雜湊表中查詢資料 no...