下面代码实现十进制转R进制,采用秦九昭算法。
string dToR(int n, int r) {
string res;
while (res.size() == 0||n != 0) {
int t = n % r;
if(t >= 0 && t <= 9) {
res = res + (char)(t + '0');
} else {
res = res + (char)(t - 10 + 'A');
}
n /= r;
}
reverse(res.begin(), res.end());
return res;
}
下面代码实现R进制转十进制,按位乘权重相加
int rToD(string n, int r) {
int res = 0;
for (int i = 0; i < n.size(); i ++ ) {
if(n[i] >= '0' && n[i] <= '9') {
res = res * r + n[i] - '0';
} else {
res = res * r + n[i] - 'A' + 10;
}
}
return res;
}
下面为测试程序,供参考:
#include <bits/stdc++.h>
using namespace std;
string dToR(int n, int r) {
string res;
while (res.size() == 0||n != 0) {
int t = n % r;
if(t >= 0 && t <= 9) {
res = res + (char)(t + '0');
} else {
res = res + (char)(t - 10 + 'A');
}
n /= r;
}
reverse(res.begin(), res.end());
return res;
}
int rToD(string n, int r) {
int res = 0;
for (int i = 0; i < n.size(); i ++ ) {
if(n[i] >= '0' && n[i] <= '9') {
res = res * r + n[i] - '0';
} else {
res = res * r + n[i] - 'A' + 10;
}
}
return res;
}
int main() {
string base[19] = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一"
, "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九"};
int n;
int r;
cout << "请输入一个十进制数:" ;
cin >> n;
cout << "请输入R:";
cin >> r;
cout << n << "的" << base[r - 1] << "进制为:" << dToR(n, r) << endl;
cout << "————————————" << endl;
string nStr;
cout << "请输入R:";
cin >> r;
cout << "请输入一个" << base[r - 1] << "进制数:" ;
cin >> nStr;
cout << nStr << "的十进制为:" << rToD(nStr, r) << endl;
return 0;
}
运行结果截图如下: