C 實現10進製轉2進製

2022-01-19 11:02:44 字數 1752 閱讀 7022

這幾天在複習計算機原理,看到二進位制忽然想到二進位制轉10進製的公式,然後轉念一想10進製轉二進位制的公式好像沒印象,那索性自己寫出來。

結果學渣的我發現,並不能寫出來!什麼數列,對數,xx函式忘得一乾二淨,而且需要有需要判斷的地方,於是崩潰了,以前代數題並沒寫過條件啊~

索性用c#**搞出來(雖然在c#裡有方法直接轉換)

二進位制值

10進製值公式0

0011

1 10

2f(2)=10^1 =10113

f(3):比 log₂3最小的整數字1,記錄10^1,並3-(2^1)=1,f(1)=1,則最終結果為10^1+f(1)=10+1=11

1004

f(4): log₂4=2,整數,直接返回10^2

1015

f(5):比 log₂5最小的整數字2,記錄10^2,並5-(2^2)=1,f(1)=1,則最終結果為10^2+f(1)=100+1=101

1106

f(6):比 log₂6最小的整數字2,記錄10^2,並6-(2^2)=2,f(2)=10,則最終結果為10^2+f(2)=100+10=110

1117

………………

1000

8………………

1001

9………………

1010

10………………

1011

11………………

1100

12………………

1101

13………………

1110

14………………

1111

15f(15):比 log₂15最小的整數字3,記錄10^3,並15-(2^3)=7,f(7)=111,則最終結果為10^3+f(7)=1000+111=1111

10000

16f(16):比 log₂6最小的整數字4,整數,直接返回10^4

公式是這樣子的。 假如求10進製數n的二進位制,先求以2為底的n的對數log₂n,判斷log₂n是否為為整數,如果為整數直接返回10^log₂n,否則求出比log₂n最小的整數t(如1.001取1,2.02取2,3.9取3)。求出並記錄10^t,然後將n減去2^t並重複執行以上步驟,返回的值與記錄的10^t相加。

以上我們設這個函式為f(n);

貼**,無疑,用了遞迴~

private

double decimaltobinarysystem(int

decimalnumber)

if (decimalnumber==1

)

var doublevalue = (double

) decimalnumber;

var logarithm = math.log(doublevalue,2

);

var logformat =math.truncate(logarithm);

var basenum = math.pow(10

, logformat);

if(logarithm.equals(logformat))

var leftnumber = doublevalue - math.pow(2

, logformat);

return basenum + decimaltobinarysystem((int

)leftnumber);

}

僅測試過大於等於0的整數,負數和小數未測試。

只是樂於思考一下,拋磚引玉歡迎指正

10進製轉2進製

題目 將10進製數字轉換為2進製。思考 進製轉換有三種情況。十進位制轉二,八,十六進製制 三種轉化的方法類似,我重點說十進位制轉二進位制的方法,其餘兩種情況可以模擬。十進位制轉二進位制 方法 10進製數字,整數部分除2後每次餘數反向取 小數部分乘2直到小數部分為0 特殊情況取位數 將整數部分正向取。...

10進製轉2進製和16進製制

看到論壇說面試遇到,就嘗試寫 public class test public static string tobinary int n return temp.reverse tostring 10進製轉16進製制 將給定的十進位制整數除以基數16,餘數便是等值的16進製制的最低位。將上一步的商再...

bitset 10進製轉2進製 2進製各種操作

bitset儲存二進位制數字。bitset就像乙個bool型別的陣列一樣,但是有空間優化。bitset中的每個元素都能單獨被訪問,例如對於乙個叫做a的bitset,表示式a 3 訪問了它的第4個元素,就像陣列一樣。但是輸出單獨訪問結果不能用printf,和bitset有關的輸出都用cout 另外bi...