程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 十進制整數轉換為任意進制C++實現

十進制整數轉換為任意進制C++實現

編輯:關於C語言
 

昨天我曾經寫了一篇關於十進制轉換為二進制的文章: 十進制整數轉換為二進制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,用於大於十的進制。下面
是執行結果
10toN.png
下面驗證一下:
1)    2*8+1=17
2)    1*9+8=17

3)    6*16+4=100

4)    2*4^2=32

驗證無誤!

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved