描述
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
输入描述:
一个1000位(即10^999)以内的十进制数。
输出描述:
输入的十进制数的二进制逆序数。
示例
输入:
173
复制
输出:
181
代码
#include <iostream>
#include <algorithm>
using namespace std;
//将字符串格式的num由m进制转换成n进制
string conversion(string num, int m, int n){
string ans = "";
for(int i = 0; i < num.length(); ){
int r = 0;
//让num对做除法取最后的余数
for(int j = i; j < num.length(); j ++){
r = r * m + num[j] - '0';
num[j] = r / n + '0';
r = r % n;
}
//将做除后得到的余数加入ans
ans += char(r + '0');
//去除前导0
while(num[i] == '0') i ++;
}
//注意:转换后的n进制是逆序的
return ans;
}
int main() {
string str_decimal;
string str_binary;
while (cin >> str_decimal) {
str_binary = conversion(str_decimal, 10, 2);//本函数转换后,返回的是序列本身是逆序的
str_decimal = conversion(str_binary, 2, 10);
reverse(str_decimal.begin(), str_decimal.end());
cout << str_decimal << endl;
}
return 0;
}