题目描述
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。 例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
输入
一个1000位(即10^999)以内的十进制数。
输出
输入的十进制数的二进制逆序数。
样例输入
173
样例输出
181
思路分析
- 由于输入有1000位,则应将初始输入存储到字符串中;
- 本解法采用模2取余的方法求输入数字的2进制表达形式;
- 2进制转换成10进制的过程中采用普通大数加法的形式;
代码
/**
参考 优快云 Blog : http://blog.youkuaiyun.com/sjf0115/article/details/8690581
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 4000; // 因为输入的10进制不超过1000位,则转换成2进制应该不超过4000位(2^4 = 16)
const int oldBase = 10; // 原始进制
const int newBase = 2; // 新进制
string str; // 因为输入为不超过1000位的10进制数则应该用字符串接收
/**
数组的 0 号元素均用于存储数组的长度
*/
int br[maxn] = {
0}; // 存储2进制
int dr[maxn] = {