(一)十进制 转 K 进制(入门)
思路:
根据 “除基取余法”
“基” -----> 表示需要转换的进制数 K
“取余” -----> 表示 待转换的十进制数除以 K 后,剩余的数值,做低位存储
代码实现如下:
#include <bits/stdc++.h> //万能头文件
using namespace std;
vector<int>bit; // 储存结果数组
int main()
{
int num_bit10; // 表示 十进制数
int num_bitK; // 表示 需要转换的 K 进制数
cin >> num_bit10 >> num_bitK; // 输入数值
do { // 因为输入数值为 0 后,无结果存储,所以用 do——while
int temp = num_bit10 % num_bitK; // 开始 取余
num_bit10 /= num_bitK; // 取完余 后 原数值除基
bit.push_back(temp); // 尾插 存储 结果余数
} while (num_bit10 != 0);
for (int i = (int)bit.size() - 1; i > -1; i--) { // 由于是低位存储,所以循环高位位输出
if ((int)bit[i] >= 10) { // 判断 K 进制数中是否 超出 10进制数
printf("%c", bit[i] - 10 + 'A'); // 根据超出 10 进制数 用英文字母代替数值
} else {
cout << bit[i]; // 正常输出转换进制数 0 ~ 9 之间的数值
}
}
return 0;
}
(二)K 进制数 转 十进制数
思路:
对于一个十进制数 y = d1 d2 ... dn ,它可以表示的形式为:
y = d1 * 10^n - 1 + d2 * 10^n - 2 + ... + dn - 1 * 10 + dn;
同理,如果 K 进制数 x = a1 a2 ... an, 所以它的十进制数也可以这样的形式表示:
y = a1 * P^n - 1 + a2 * P^n - 2 + ... + an - 1 * P + an;
代码实现如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string num; // 表示 待转换的 K 进制数
int num_bitQ; // 表示 K 进制
int pos = 0; // 表示 该进制数所在的下标
int ans = 0; // 存储结果
cin >> num >> num_bitQ; // 开始输入
for(int i = (int)num.size() - 1;i > -1;i--,pos++){ // 由于是低位存储 所以从高位开始读取
if(num[i] >= '0' && num[i] <= '9') ans += (num[i] - '0') * pow((double)num_bitQ,pos); // 判断 K进制数 是否为数值
else if(num[i] >= 'A' && num[i] <= 'Z') ans += (num[i] - 'A' + 10) * pow((double)num_bitQ,pos); // 判断 K进制数 是否为字母
// 随后存储结果 ans
}
cout << ans << endl; // 输出结果 ans
return 0;
}