专栏文章
B3849 [GESP样题 三级] 进制转换
B3849题解参与者 8已保存评论 10
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @mio0x0hp
- 此快照首次捕获于
- 2025/12/02 11:33 3 个月前
- 此快照最后确认于
- 2025/12/02 11:33 3 个月前
欢迎大家报名洛谷网校的课程,期待和大家一起进步!
我们从要转换的十进制数 开始。只要 还大于 0,我们就重复进行两个步骤:第一,计算 除以进制数 的余数,这个余数就是新进制数中最右边(最低位)的那个数字;第二,将 更新为它除以 后的商(即整除的结果),为下一次计算做准备。我们把每次得到的余数记录下来,直到 最终变为 0 为止。
这里有一个关键点:我们通过这个方法得到的数字顺序,是“从右到左”的,也就是先得到个位,再得到十位,以此类推。但我们输出的时候,需要“从左到右”的正确顺序。因此,我们需要一个地方先把这些计算出来的数字暂存起来。一个静态数组就是非常好的选择。我们可以每算出一个新进制的数位,就把它存进数组里。
另外,题目要求当数位大于等于 10 时,要用
A, B, C 等字母来表示。A 代表 10,B 代表 11,一直到 Z 代表 35。这个转换也很简单:如果计算出的余数小于 10,它就是一个普通的数字;如果余数大于等于 10,我们就需要把它转换成对应的字母。例如,如果余数是 10,它对应的字母就是 A;如果是 11,就是 'B'。我们可以发现一个规律:第 r 个数字(r >= 10)对应的字母,就是从 'A' 开始数的第 r - 10 个字母。当整个计算过程结束后,我们只需要将存放在数组里的结果,从后往前依次输出,就能得到最终的、顺序正确的 进制数了。
CPPwhile (n > 0) {
int r = n % r;
cnt++;
if (r < 10) {
ans[cnt] = r + '0';
} else {
ans[cnt] = r - 10 + 'A';
}
n = n / r;
}
for (int i = cnt; i >= 1; --i)
cout << ans[i];
相关推荐
评论
共 10 条评论,欢迎与作者交流。
正在加载评论...
