C++给你一个十进制的非负整数 n,你需要将它转换成二进制后,将这个二进制数翻转过来输出(需要去掉前导 0)。 例如对于十进制的 4 ,它的二进制表示是 100,倒过来是 001,去掉前导 0 之后是 1,所以输出 1。 如果最后结果是 0,则输出 0。
时间: 2024-02-24 13:53:18 浏览: 83
好的,这是一道经典的二进制问题。我来给你讲一下思路。
首先,我们可以使用C++中的 bitset 类型来将十进制转换成二进制。例如,对于数字 4,我们可以这样写:
```cpp
int n = 4;
bitset<32> binary(n);
```
其中,`bitset<32>` 表示二进制数的位数为 32 位,这里可以根据实际需要调整位数。使用 `binary.to_string()` 可以将二进制数以字符串的形式输出。
接下来,我们需要将翻转后的二进制数转换成整数并输出。这里可以使用 C++ 中的 `stoi` 函数将字符串转换成整数。需要注意的是,如果翻转后的二进制数是一个以 0 开头的字符串,那么在转换成整数时需要将其转换成 8 进制或者 16 进制,否则会被当作 10 进制处理。例如,对于字符串 "001",正确的转换方式是 `stoi("1", 0, 2)`,其中第三个参数为进制数,表示将字符串按照二进制数解析。
最后,我们需要去掉翻转后二进制数的前导 0。这里可以使用 C++ 中的 `find_first_not_of` 函数来找到第一个不是 0 的字符的位置,然后将该位置之后的字符截取出来即可。
下面是完整的代码实现:
```cpp
#include <iostream>
#include <bitset>
using namespace std;
int main() {
int n = 4;
bitset<32> binary(n);
string str = binary.to_string();
reverse(str.begin(), str.end());
int num = stoi(str, 0, 2);
string res = to_string(num);
res.erase(0, res.find_first_not_of('0'));
if (res.empty()) {
res = "0";
}
cout << res << endl;
return 0;
}
```
输出结果为:
```
1
```
希望能对你有所帮助!
阅读全文