進製轉換是乙個很常用的技巧,平時在刷題中一般是乙個小模組,在乙個大題裡面作為資料處理的步驟。
資料定義:待轉換數q為w進製,需要轉換為p進製。
下面是進製轉換的一般流程:
(1)將q先轉換為10進製數temp
(2)將temp再轉換為p進製
以下為演算法的詳細步驟:
首先要先明確乙個定義,即十進位制的數y=d
1d2d
2d3.
..dn
y=d_d_d_d_...d_
y=d1d
2d2
d3
...d
n,如53245,5萬2千3百4十5。令其為y
yy,那麼其中d1=
5d_=5
d1=5,d2=
3...d3
=2
d_=3...d_=2
d2=3.
..d3
=2等等,它可以寫成以下形式:
y =d
1∗10
n−1+
d2∗1
0n−2
+d3∗
10n−
3...
+d
ny=d_*10^+d_*10^+d_*10^...+d_
y=d1∗
10n−
1+d2
∗10
n−2+
d3∗
10n−
3...
+dn
由此,乙個w
ww進製數q=a
1a2a
2a3.
..an
q=a_a_a_a_...a_
q=a1a
2a2
a3
...a
n也可以寫成:
q =a
1∗wn
−1+a
2∗wn
−2+a
3∗wn
−3..
.+an
q=a_*w^+a_*w^+a_*w^...+a_
q=a1∗
wn−1
+a2
∗wn−
2+a3
∗wn
−3..
.+an
而這個公式實際上就直接計算出了其10進製的值,對公式從右往左累加其值即可。由以上,將q
qq轉換為10進製可以由如下迴圈得到:
int x=
1101
;//設定上為2進製,值應該為13,將其轉換為10進製的y
int y=
0,pro=1;
//pro為輔助值,用來計算2的階乘如2^0=1,2^1=2,2^2=4,其值將分別為1,2,4
while
(x!=0)
將10進製數temp轉化為p進製,可以用除基取餘法。比如將15轉化為2進製:
15除2,等於7,餘1;
7出2,等於3,餘1;
3除2,等於1,餘1;
1除2,等於0,餘1;演算法終止。
這樣將位數從後往前拼湊,答案即為1111。
實現如下:
int x=
11,num=0;
//x為10進製數,將要轉化的2進製數的每一位放在ans裡,num記錄2進製數的位數
int ans[
1024]=
;dowhile
(x!=
0)
總結:進製轉換作為乙個小技巧,經常出現在大題的資料處理部分,其演算法簡單有效。本文介紹的兩步,都是o(n
)o(n)
o(n)
級的演算法。其中初學者對(1)部分的演算法容易忘記,可以嘗試多編寫,記憶。
《演算法筆記》C 進製轉換
對於乙個p進製的數字,若要轉化為q進製,則需要兩部 第一步 將p進製的數字轉化為10進製 y a1 p n 1 a2 p n 2 an 1p an 如何實現?int x,p int y 0,pro 1 p表示進製 while x 0 將 十進位制轉換為q進製,除基取餘法 例如11轉換為2進製 首先1...
演算法筆記(六)進製轉換
兩種情況 1 將p進製 x 轉換為q進製 資料 要分兩步走 1 將p進製數在轉化為10進製數y 十進位制數形式為 y d1d2d3d4d5d6d7.dn 同可以寫為 y d1 10 n 1 d2 10 n 2 dn 1 10 dn p進製數x為a1a2a3a4a5a6.an,類似於十進位制轉化,同可...
進製轉換 演算法筆記
進製轉換步驟 將p進製轉換為q進製,需要分為兩步 int y 0,product 1 p進製x轉化為10進製的y while x 0 十進位制y轉化為q進製z int z 40 num 0 陣列z存放q的進製數y的每一位,num為位數 dowhile y 0 這樣陣列從高位z num 1 到低位nu...