C++ 进制数专题


C++ 进制数专题

原创 于 2023-02-28 15:23:38 发布 · 粉丝可见 · 500 阅读 · 0 · 0 · 本内容遵循CC 4.0 BY-SA版权协议 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/129252390

(一)十进制转 K 进制(入门)

思路:

根据        “除基取余法”

“基”        ----->        表示需要转换的进制数  K

“取余”        ----->        表示 待转换的十进制数除以  K  后,剩余的数值,做低位存储

代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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;

代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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;
}

觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭

微信二维码

wechat pay

支付宝二维码

ali pay

C++ 进制数专题
http://blog.angindem.cn/2023/02/28/Angindem-CSDN博客/002_2/
作者
Angindem
发布于
2023年2月28日
许可协议