web-dev-qa-db-ja.com

2進数から10進数の整数出力への変換

2進入力を10進整数に変換する必要があります。 10進数から2進数に移行する方法を知っています。

n = int(raw_input('enter a number: '))
print '{0:b}'.format(n)

私は逆方向に行く必要があります。私の教授は、私たちのコードをチェックするとき、11001を入力するので、25を取り戻す必要があると言いました。メモを確認しましたが、その方法がわかりません。グーグルや他のインターネットリソースもあまり役に立たなかった。

最大の問題は、組み込み関数の使用が許可されていないことです。使用が許可されていない理由は理解できますが、Pythonには2進化10進数の関数が組み込まれているため、この問題がはるかに困難になっています。

4
purlinka

int を使用して、ベースを2(バイナリの場合)に設定できます。

>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> int(binary, 2)
25
>>>

ただし、そのようにintを使用できない場合は、いつでも次のように実行できます。

binary = raw_input('enter a number: ')
decimal = 0
for digit in binary:
    decimal = decimal*2 + int(digit)
print decimal

以下はデモンストレーションです:

>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> decimal = 0
>>> for digit in binary:
...     decimal = decimal*2 + int(digit)
...
>>> print decimal
25
>>>
17
iCodez

intなしで実行したい/必要な場合:

_sum(int(c) * (2 ** i) for i, c in enumerate(s[::-1]))
_

これにより、文字列(_s[::-1]_)が逆になり、各文字cとそのインデックスi(_for i, c in enumerate(_)が取得され、文字の整数(int(c))インデックスの2乗(_2 ** i_)で、それらをすべて合計します(sum())。

2
jonrsharpe
a = input('Enter a binary number : ')
ar = [int(i) for  i in a]
ar  = ar[::-1]
res = []
for i in range(len(ar)):
    res.append(ar[i]*(2**i))
sum_res = sum(res)      
print('Decimal Number is : ',sum_res)
1
V. Gokul

これは完全なことです

binary = input('enter a number: ')
decimal = 0
for digit in binary:
decimal= decimal*2 + int(digit)

print (decimal)
0
Papi Harpy

私はずっと前にこの問題に取り組み始め、独自の2進化10進変換関数を書き込もうとしました。 10進数を2進数に変換する方法は実際にはわかりません!私は今日それを再訪してそれを理解しました、そしてこれは私が思いついたものです。これがあなたに必要なものかどうかはわかりませんが、ここにあります:

def __degree(number):
    power = 1

    while number % (10**power) != number:
        power += 1

    return power

def __getDigits(number):
    digits = []
    degree = __degree(number)

    for x in range(0, degree):
        digits.append(int(((number % (10**(degree-x))) - (number % (10**(degree-x-1)))) / (10**(degree-x-1))))
    return digits

def binaryToDecimal(number):
    list = __getDigits(number)
    decimalValue = 0
    for x in range(0, len(list)):
        if (list[x] is 1):
            decimalValue += 2**(len(list) - x - 1)
    return decimalValue

繰り返しになりますが、私はまだPythonだけで、これが役立つことを願っています。最初の関数は桁数を決定し、2番目の関数は実際に桁数を計算してリストに返します。 、そして3番目の関数は実際に呼び出す必要がある唯一の関数であり、10進値を計算します。先生が実際に独自のコンバーターを作成することを望んでいた場合、これは機能します。すべての数値でテストしたわけではありませんが、完璧に動作するために!あなたは私のためにバグを見つけると確信しています!とにかく、私はそれを次のように呼びました:

binaryNum = int(input("Enter a binary number: "))

print(binaryToDecimal(binaryNum))

これにより、正しい結果が出力されます。乾杯!

0
MrSheng

入力は文字列または整数です。

num = 1000  #or num = '1000'  
sum(map(lambda x: x[1]*(2**x[0]), enumerate(map(int, str(num))[::-1])))

# 8
0
M. kavin babu

このソリューションを試してください:

def binary_int_to_decimal(binary):
n = 0
for d in binary:
    n = n * 2 + d

return n
0