任务要求:输入一个 32
比特无符号整数,将其按比特倒序,写程序完成此转换,要求使用 class
类。部分代码已给出,请将代码填补完整。例如,输入 43261596
(比特表示为 00000010100101000001111010011100
),输出 964176192
(比特表示为 00111001011110000010100101000000
)。
解决思路:将十进制的数转换为二进制数,不满32位的由0填充(使用string类来处理),将该string类对象顺序倒置,再借助条件转换为10进制数输出。
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
class Solution
{
public:
uint32_t reverseBits(uint32_t n)
{
string str;
for(int i = 0; i < 32; i++) {
str = to_string(n % 2) + str;
n /= 2;
}
string res_str = "00000000000000000000000000000000";
for (int i = 0; i < 32; i++) {
res_str[i] = str[31 - i];//超出str的部分将仍然保留为0
}
int m(0);
int i = 0;
while ((res_str[i] == '0')) { i++; }//从第一个不是0的位置开始
for (; i < 32; i++) {
if (res_str[i] == '1') {
int j = 1;
m += j * pow(2, 31 - i);
}
else int j = 0;
}
return m;
}
};
int main(){
Solution s;
int num;
cin >> num;
cout << s.reverseBits(num);
return 0;
}
需要注意的点:转换为2进制数后不满的位必须要用0填满,否则会出错。