昨天我曾經寫了一篇關於十進制轉換為二進制的文章: 十進制整數轉換為二進制C++實現 現在我對之前的程序略微做了修改,用於適用與任意進制(2-36)。
將十進制11轉換為二進制的1011的過程為
11/2=5……1
5/2=2……1
2/2=1……0
1/2=0……1
將上面的余數,從下至上排序即可得到1011.如果將11轉換為三進制則只需將上面的除數2替換為3即可:
11/3=3……2
3/3=1……0
1/3=0……1
所以11轉換為三進制的結果是102(1*3^2+0*3^1+2*3^0=9+0+2=11)。故將上面的除數替換成N就是求N進制
#include<iostream>
using namespace std;
void d2b(int var,int n,int *p){ //定義函數
int i=31,j=0, tmp; //定義函數中需要用到的變量 tmp用於交換,其他為下標
while(var>0){//當var大於0時對var求余,並除以n賦給var
p[i]=var%n;//第一個余數存貯於p[31](數組最後一位)
var=var/n;
i--;
}
i++;
//*將獲得值的起始位置遷移至p[0]
for(;i<32;j++){
tmp=p[j];
p[j]=p[i];
p[i]=tmp;
i++;
}
p[j]=-1;//將數值結尾後面設置為-1
}
int main(){
char he[26];
for(int i=0;i<26;i++) he[i]=65+i;
int var,n;
cout<<"請輸入一個需要轉換的十進制整數和需要轉換的進制:\n";
cin>>var;cin>>n;
int p[32];
d2b(var,n,p);
cout<<"轉換出的"<<n<<"進制數為:";
for(int i=0;p[i]>=0;i++){ //順序輸出數組p,遇到-1終止
if(p[i]>9){
cout<<he[p[i]-10];
}else{
cout<<p[i];
}
}
cout<<endl;
}
var為需要轉換為其他進制的十進制數;n為目標進制 ;數組he[ ]存貯的是A-Z,用於大於十的進制。下面
是執行結果
下面驗證一下:
1) 2*8+1=17
2) 1*9+8=17
3) 6*16+4=100
4) 2*4^2=32
驗證無誤!