3526 - 二进制翻转

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

杰克被女神问的一道题难住了:输入一个非负整数(十进制),输出该数的二进制位翻转之后的数(十进制)。

他百思不得其解,机智的你能帮帮他吗?

<br />

题目输入

第一行一个数T(T<=100),表示数据组数,

接下来T行,每行一个非负整数a(a<=10^9),表示每一个询问。


题目输出

每行一个整数,表示答案。


输入/输出样例

输入格式

3
6
8
1

输出格式

3
1
1

C++解答

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#define for1( i , a , b ) for( int i = a ; i <= b ; i++ )
#define for2( i , a , b ) for( int i = a ; i >= b ; i-- )
using namespace std ;

class Jack
{
	public:
		void play() ;
	protected:
		int t , n , s , s1 , sum , w , a[ 40 ];
} ;
void Jack::play()
{
	//freopen( "in.txt" , "r" , stdin ) ;
	//freopen( "out.txt" , "w" , stdout ) ;
	cin >> t ;
	while( t-- ) {
		memset( a , 0 , sizeof( a ) ) ;
		cin >> n ;
		s = 0 ;
		while( n ) {
			a[ s++ ] = n % 2 ;
			n /= 2 ; 
		}
		//for1( i , 0 , s ) cout << a[ i ] << ' ' ;
		//cout << endl ;
		s1 = s - 1 ;
		while( a[ s1 ] == 0 ) s1-- ;
		w = 1 , sum = 0 ;
		for2( i , s1 , 0 ) sum += w * a[ i ] , w <<= 1 ;
		printf( "%d\n" , sum ) ;
	}
}
int main()
{
	Jack jack ;
	jack.play() ;
	return 0 ;
}

Python解答

# coding=utf-8
n=int(input())
for i in range(n):
    a=int(input())
    b=bin(a)
    b2=b[2:]
    b3=b2[::-1]
    a2=int(b3,2)
    print(a2)