Search code examples
pythonbinaryint

int 111 to binary 111(decimal 7)


Problem:Take a number example 37 is (binary 100101). Count the binary 1s and create a binary like (111) and print the decimal of that binary(7)

num = bin(int(input()))
st = str(num)
count=0

for i in st:
    if i == "1":
        count +=1

del st
vt = ""
for i in range(count):
    vt = vt + "1"
vt = int(vt)
print(vt)

I am a newbie and stuck here.


Solution

  • I wouldn't recommend your approach, but to show where you went wrong:

    num = bin(int(input()))
    st = str(num)
    count = 0
    
    for i in st:
        if i == "1":
            count += 1
    
    del st
    # start the string representation of the binary value correctly
    vt = "0b"
    for i in range(count):
        vt = vt + "1"
    # tell the `int()` function that it should consider the string as a binary number (base 2)
    vt = int(vt, 2)
    print(vt)
    

    Note that the code below does the exact same thing as yours, but a bit more concisely so:

    ones = bin(int(input())).count('1')
    vt = int('0b' + '1' * ones, 2)
    print(vt)
    

    It uses the standard method count() on the string to get the number of ones in ones and it uses Python's ability to repeat a string a number of times using the multiplication operator *.