1最大62進製:[0~9,a~z,a~z]#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 }
原理:例如我們將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.二進位制...