進製轉換模板

2022-06-26 04:33:12 字數 1727 閱讀 2209

1

#define maxn 20

2int

t[maxn],a[maxn],n;

3char olddata[maxn],newdata[maxn]; //

轉換前、後的資料

4int olds,news; //

轉換前、後的進製

5void trans()//

呼叫方式:輸入olds、news、olddata,然後呼叫trans(),輸出newdata

617 a[k++]=t[0]%news;

18 t[0]/=news;

19while(len>0 && !t[len-1]) len--;20}

21 newdata[k]='\0'

;22for(i=0;i1-i] = a[i] + (a[i]<10 ? '

0' : (a[i]<36 ? 55 : 61

));23 }

最大62進製:[0~9,a~z,a~z]

原理:例如我們將10進製的5031轉換成2進製:

使用這種不斷除二取餘的方法,我們就可以得到2進製數:1001110100111

同樣的,我們對於任意的兩個進製間的轉換也使用這種方法,例如將16進製制的15bde轉換成8進製的:

在這裡,我們要把b(11)、d(13)、e(14)都看作一位,並且除法中高位的餘數,加到低位上時,不再是乘10,而是乘16,

例如最後15/8時,1/8=0餘1,這時5+(1*16)=21,21/8=2餘5,就在右邊寫上5即可。

而上面那個模板的演算法,就是模擬這種計算過程。

用更加通俗易懂的方式來重寫上面那個模板:

1 #include2 #include3 #include4

#define maxn 20

5using

namespace

std;

6 stackans;

7int

t[maxn],n;

8char olddata[maxn],newdata[maxn]; //

轉換前、後的資料

9int olds,news; //

轉換前、後的進製

10void trans()//

呼叫方式:輸入olds、news、olddata,然後呼叫trans(),輸出newdata

1122 ans.push(t[0]%news);//

得到乙個餘數,放入結果棧

23 t[0]/=news;

24//

for(i=len-1;i>=0;i--) printf("%d ",t[i]); printf("\n");

25while(len>0 && !t[len-1]) len--;//

去掉做完除法後,前面那些零 26}

2728

int cnt=0;29

while(!ans.empty())

3034}35

intmain()

3644 }

進製轉換C 模板

進製轉換 p 進製數 x 轉換為十進位制數 y int y 0,product 1 while x 將十進位制數 y 轉換為 q 進製 z int z 40 num 0 dowhile y 之所以用do while,是因為防止十進位制為 0 的時候,while不工作例題訓練 這次的例題是力扣上的題目...

高精度進製轉換模板

高精度進製轉換模板 高精度進製轉換 把oldbase 進製的數轉化為newbase 進製的數輸出。呼叫方法,輸入str,oldbase newbase.change solve output 也可以修改output 使符合要求,或者存入另外乙個字元陣列,備用 include include defi...

進製轉換模板(未完待續)

一,十進位制轉其他進製 1 十進位制轉r進製 includeusing namespace std void pre int n,int r 3.十進位制轉十六進製制 直接 x x輸出就行了 includeusing namespace std int main 二,其他進製轉十進位制 1.二進位制...