-5

これはdigaとdigbを出力しますが、cでは動作しません! 何か助けはありますか?これは、デナリーからバイナリへのコンバーターであるはずですが、1-64 しかありません。コードをクラックすると、これが増加します! 本当にありがとう

denaryno=int(input("Write a number from 1-64 "))
if 64%denaryno > 0:
    diga=0
    remaindera=(64%denaryno)
    if 32/denaryno<1:
        digb=1
        remainderb=(denaryno%32)
    else:
        digb =0
        if 16/remainderb<1:
            digc=1
            remainderc=(denaryno%16)
        else:
            digc=0
            if 8/remainderc<1:
                digd=1
                remainderd=(denaryno%8)
            else:
                digd=0
                if 4/remainderd<1:
                    dige=1
                    remaindere=(denary%4)
                else:
                    dige=0
                    if 2/remaindere<1:
                        digf=1
                        remainderf=(denary%2)
                    else:
                        digf=0
                        if 1/remainderf<1:
                            digg=1
                            remainderg=(denary%1)
                        else:
                            digg=0
print (str(diga)+str(digb))
4

2 に答える 2

3

top /ステートメントのいずれかに設定するだけですdigc。の場合は、まったく設定しません。ifelse32/denaryno<1Truedigc

digc関数の一番上に設定します(0または他のものにしたいものに)。これは、すべての桁変数 、digddigeなどに適用されます。

代わりに、実際にすべきことは、数字のリストを使用し、数値を因数で割るたびにそのリストに 0 または 1 を追加することです。

divmod()関数を見てみたいと思うかもしれません。商と剰余の両方を返します。ifここで必要なステートメントの数を削減するために、ここでいくつかのループを実行することもできます。

number = int(input("Write a number from 1-64 "))
digits = []
factor = 64
while number:
    quotient, number = divmod(number, factor)
    digits.append(quotient)
    factor //= 2
print(''.join(map(str, digits)))
于 2013-10-31T15:39:09.047 に答える