题目描述
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
输入描述
一个1000位(即10^999)以内的十进制数。
输出描述
输入的十进制数的二进制逆序数。
示例
输入:173
输出:181
思路
-
首先将十进制转为二进制,得出的1,0等存进数组中,存的过程就是倒序存放。
-
然后再将数组中的二进制数转为十进制。
-
十进制转二进制:取模、除整、取模、除整...
-
二进制转十进制:乘进制数、加数字、乘进制数、加数字...
具体实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int a;
char b[100]; //存储二进制数
int c,cnt=0;
cin>>a; //输入十进制数a
//十进制转二进制
while(a>0){
c=a%2;
b[cnt++] = c+'0';
a/=2;
}
// 验证十进制转二进制是否正确
// for(int i=cnt-1; i>=0; i--){
// cout<<b[i];
// }
// 逆序的
// for(int i=0; i<strlen(b); i++){
// cout<<b[i];
// }
//二进制转十进制
int ans=0;
for(int i=0; i<strlen(b); i++){
ans*=2;
ans+= (b[i]-'0');
}
cout<<ans;
return 0;
}