编程语:C++ 难度:中等 单个测试集评测时长限制:3秒 补全函数,输入一个整数,并输出其对应的二进制、八进制和十六进制数的逆序数 输入输出样例: 输入1:46 输出2: 011101 65 E2
时间: 2024-02-03 15:14:40 浏览: 165
下面是一个可能的 C++ 实现:
```cpp
#include <iostream>
#include <algorithm>
#include <sstream>
std::string reverse(std::string s) {
std::reverse(s.begin(), s.end());
return s;
}
std::string to_binary(int n) {
std::stringstream ss;
while (n > 0) {
ss << n % 2;
n /= 2;
}
return reverse(ss.str());
}
std::string to_octal(int n) {
std::stringstream ss;
while (n > 0) {
ss << n % 8;
n /= 8;
}
return reverse(ss.str());
}
std::string to_hexadecimal(int n) {
std::stringstream ss;
while (n > 0) {
int digit = n % 16;
if (digit < 10) {
ss << digit;
} else {
ss << char('A' + digit - 10);
}
n /= 16;
}
return reverse(ss.str());
}
int main() {
int n;
std::cin >> n;
std::cout << reverse(to_binary(n)) << ' ';
std::cout << reverse(to_octal(n)) << ' ';
std::cout << reverse(to_hexadecimal(n)) << '\n';
return 0;
}
```
首先,我们定义了一个 `reverse` 函数,用于将字符串逆序。这个函数在后面的输出中被多次使用。
然后,我们分别实现了三个转换函数 `to_binary`、`to_octal` 和 `to_hexadecimal`。这些函数使用了一个 `stringstream` 对象来构造转换后的字符串。对于二进制和八进制,我们采用和上一个例题相同的方法,除以 2 或者 8 取余,然后将余数添加到字符串中。对于十六进制,我们需要特判一下余数,如果是小于 10 的数字,直接添加到字符串中;否则,需要将其转换成 A~F 中的一个字符。
最后,在 `main` 函数中,我们读入一个整数,然后分别调用三个转换函数,将结果逆序输出。注意,每个转换结果之间需要加上一个空格。
阅读全文