演算法筆記之旅 進製轉換

2021-10-07 07:41:40 字數 1928 閱讀 7713

進製轉換是乙個很常用的技巧,平時在刷題中一般是乙個小模組,在乙個大題裡面作為資料處理的步驟。

資料定義:待轉換數q為w進製,需要轉換為p進製。

下面是進製轉換的一般流程:

(1)將q先轉換為10進製數temp

(2)將temp再轉換為p進製

以下為演算法的詳細步驟:

首先要先明確乙個定義,即十進位制的數y=d

1d2d

2d3.

..dn

y=d_d_d_d_...d_

y=d1​d

2​d2

​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=a1​a

2​a2

​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...