以下的c++代碼可以實現任意進制間的轉換;
思路:以十進制爲跳板,先將其他進制的數字轉換爲十進制,再將十進制轉換爲其他進制。
/*
*create by chenzj36
*on 2018/8/1
*實現任意進制間的轉換
*/
#include<iostream>
using namespace std;
int int_pow(int x, int y) {//實現冪運算,<iostream>也提供pow()函數
int result = 1;
for (int i = 1 ; i <= y; i++) {
result *= x;
}
return result;
}
void dtoo(int dnum, int jz) {//十進制轉其他任意進制
char rnum[100];//利用字符數組存“數字”,按位處理更方便;
int i=0, j;
while (dnum >= jz) {//大於等於欲轉化的進制,繼續除,取餘。
if (dnum%jz <= 9) {
rnum[i++] = dnum % jz + '0';//數字轉換爲字符
}
else {
rnum[i++] = dnum % jz - 10 + 'A';//大於等於10的部分,用大寫字母。
}
dnum = dnum / jz;//取完餘數,進行除法操作。
}
if (dnum%jz <= 9) {
rnum[i++] = dnum + '0';
}
else {
rnum[i++] = dnum - 10 + 'A';
}
cout << "轉換爲" << jz << "進制:";
for (j = i-1; j >= 0; j--) {//將字符數組逆序輸出
cout << rnum[j];
}
cout <<endl;
}
int otod(char onum[], int jz) {//其他進制轉十進制
int n = 0;
int res = 0;
for (int i = 0; onum[i] != '\0'; i++) {//確定字符數組存儲的位數
n++;
}
for (int i = 0; i < n; i++) {
int bas;
if (onum[i] >= 'A') {//將大寫字母轉爲數字
bas = onum[i] - 'A' + 10;
}
else {//將“字符”轉“數字”
bas = onum[i] - '0';
}
res += bas * int_pow(jz, n-i-1);//權值*位對應的大小
}
return res;//返回十進制的數
}
void main() {
while (1) {
int orin,jz1,jz2;
char onum[100];
cout << "請輸入要轉換的數字(字母大寫):";//輸入任意的“數”
cin >> onum;
cout << "請輸入原始數據的進制:";//確定上面數字的進制
cin >> jz1;
cout << "請輸入要轉換的進制:";//輸入要轉化的進制
cin >> jz2;
dtoo(otod(onum, jz1), jz2);//調用函數,實現進制轉換
}
}