Więc robię ten program odejmowania i naprawdę nie wiem, dlaczego nie działa dla tych dwóch wartości. Za każdy inny działa?

def binmin(x, y):
    lenx = len(x)
    leny = len(y)
    x1 = list(x)
    y1 = list(y)
    difference= 0
    one = 0
    result = ""
    for i in range(len(x)):
        difference = str((int(x1[lenx - 1 - i])) - int(y1[leny - 1 - i]))
        if difference == "-1":
            difference = 2 - int(y1[leny - 1 - i])
            one = 1
        
        elif difference == "-2":
            one = 1
            difference = 0

        else:
            one = 0

        y1[leny - i - 2] = int(y1[leny - i - 2]) + one

        result = str(difference) + str(result)

    return result

print(binmin("11110000","00010001"))
0
Brachopomoc 24 październik 2020, 14:05

1 odpowiedź

Najlepsza odpowiedź

Zmiana:

if difference == "-1":
    difference = 2 - int(y1[leny - 1 - i])
    one = 1

Do:

if difference == "-1":
    difference = 1
    one = 1

Gdy difference jest początkowo "-1", musisz pożyczyć, więc jesteś skutecznie dodawany 2 do różnicy. Ponieważ różnica była pierwotnie -1, chcesz 2-1 = 1 dla nowej różnicy.

Oryginalna regulacja działa tylko wtedy, gdy int(y1[leny - 1 - i]) była 1, co może nie być, jeśli wcześniej został skorygowany przez wcześniejszy pożyczkę, w którym to przypadku może być 2.

0
Tom Karzes 24 październik 2020, 11:27