1
\$\begingroup\$

Here is my code:

noTest=int(input())
reverse=[]
nums=[]
for i in range(noTest):
    nums.append(int(input())) 

for num in nums:
    binary=bin(num)
    binNum=binary[2:]
    rev=binNum[::-1]
    rev=binary[:2]+rev+'0'*(32-len(rev))
    #print int(rev,2)
    reverse.append(int(rev,2))

for r in reverse:
    print(r)

Input:
The first line of input consists number of the test cases. Each test case
contains a single 32 bit integer.

Output:
Print the reverse of integer.

Input:00000000000000000000000000000001 =1
Output:10000000000000000000000000000000 =2147483648
\$\endgroup\$
2
  • \$\begingroup\$ I have... to what purpose? Know bit hacks? \$\endgroup\$
    – greybeard
    Jan 4, 2018 at 10:00
  • \$\begingroup\$ What is the question here? \$\endgroup\$
    – Thrilok
    Apr 21, 2020 at 6:50

2 Answers 2

3
\$\begingroup\$

To expand on Caridorc's answer, you can merge bin and zfill when using str.format. Which gives a much cleaner read IMO:

int('{:032b}'.format(num)[::-1], 2)

Alternately you can use format, which would be:

int(format(num, '032b')[::-1], 2)
\$\endgroup\$
1
  • 1
    \$\begingroup\$ int(format(num, '032b')[::-1], 2) \$\endgroup\$
    – Veedrac
    Jan 4, 2018 at 17:29
3
\$\begingroup\$

You can avoid building a list of results to print them after, you can just print them as you calculate them.

Also you assign a lot of variables and:

binNum=binary[2:] 

is not explicit in removing the '0b' that Python prefixes, better is

.replace('0b','')

Also the padding with 0 logic that you write is already implemented in the zfill function, so you can avoid re-writing it yourself.

Finally, you should write a function to read the input to separate concerns and maybe reuse it in a similar problem.

Here are all my suggestions implemented.

def read_numbers(n):
    return [int(input()) for _ in range(n)]

for i in read_numbers( int(input()) ):
    binary_padded = bin(i).replace('0b','').zfill(32)
    print( int( binary_padded[::-1], 2) )
\$\endgroup\$
2
  • 3
    \$\begingroup\$ replace is worse since it does a search and traverses the whole string. \$\endgroup\$
    – Veedrac
    Jan 4, 2018 at 17:30
  • \$\begingroup\$ @Veedrac I think you are right, probably in this case [:2] should be used and maybe just adding a comment to explain the removal of '0b' \$\endgroup\$
    – Caridorc
    Jan 5, 2018 at 14:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.