B3849 [GESP样题 三级] 进制转换
欢迎报名洛谷网校,报名课程可以获得对应组别的知识点讲解与答疑服务,期待和大家一起进步!点击图片即可报名。
:::align{center} :::
我们从要转换的十进制数
这里有一个关键点:我们通过这个方法得到的数字顺序,是“从右到左”的,也就是先得到个位,再得到十位,以此类推。但我们输出的时候,需要“从左到右”的正确顺序。因此,我们需要一个地方先把这些计算出来的数字暂存起来。一个静态数组就是非常好的选择。我们可以每算出一个新进制的数位,就把它存进数组里。
另外,题目要求当数位大于等于 10 时,要用 A, B, C 等字母来表示。A 代表 10,B 代表 11,一直到 Z 代表 35。这个转换也很简单:如果计算出的余数小于 10,它就是一个普通的数字;如果余数大于等于 10,我们就需要把它转换成对应的字母。例如,如果余数是 10,它对应的字母就是 A;如果是 11,就是 'B'。我们可以发现一个规律:第 r 个数字(r >= 10)对应的字母,就是从 'A' 开始数的第 r - 10 个字母。
当整个计算过程结束后,我们只需要将存放在数组里的结果,从后往前依次输出,就能得到最终的、顺序正确的
while (________) {
________; // 完成进制转换
if (________) {
ans[cnt] = ________; // 直接存入数组
} else {
ans[cnt] = ________; // 数位大于等于 10 时,转换为数字后输出
}
}
for (________)
________; // 倒序输出存放在答案数组的结果