十进制和二进制

160 阅读1分钟

题目描述

对于一个十进制数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; 
}