B3619 10 进制转 x 进制 题解
Kingdom_Tears
·
·
题解
题目传送门
这道题就是一道板子题。
例如, $10$ 进制数 $89$ 转成 $2$ 进制数使用短除法的过程就如 $图1.1$ 所示。
 $图1.1
短除法除到商为 0 时,就除完了,再将每一步除得的余数从下到上排列就是得出的答案。
如 图1.1 所示, 10 进制数 89 转成 2 进制就是 (1011001)_2 。
我们需要做的就是把这个过程用代码模拟一遍。
那怎么实现呢?
具体如下:
string answer = ""; // 存储最终答案
while (num) { // 模拟短除法并取余
if (num % x >= 10) answer += num % x - 10 + 'A';
else answer += num % x + '0';
num /= x;
}
做完短除法后,一定要将 answer 反转一遍。
因为我们是边除边存储余数,在短除法中就是从上到下存储,但我们应该从下到上存储。
反转 answer 的代码如下:
reverse(answer.begin(), answer.end()); // 反转字符串
最后,把代码拼起来就完事了。
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int num, x;
cin >> num >> x;
string answer = ""; // 存储最终答案
while (num) { // 模拟短除法并取余
if (num % x >= 10) answer += num % x - 10 + 'A';
else answer += num % x + '0';
num /= x;
}
reverse(answer.begin(), answer.end()); // 反转字符串
cout << answer; // 输出答案
return 0;
}