這幾天在複習計算機原理,看到二進位制忽然想到二進位制轉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);
貼**,無疑,用了遞迴~
privatedouble 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...