Загрузка данных


def add_in_base(a: str, b: str, base: int) -> str:
    a = a[::-1]
    b = b[::-1]

    carry = 0
    result = []

    for i in range(max(len(a), len(b))):
        da = int(a[i]) if i < len(a) else 0
        db = int(b[i]) if i < len(b) else 0
        s = da + db + carry
        result.append(str(s % base))
        carry = s // base

    if carry:
        result.append(str(carry))

    return "".join(reversed(result))

def sub_in_base(a: str, b: str, base: int) -> str:
    a = a[::-1]
    b = b[::-1]

    borrow = 0
    result = []

    for i in range(len(a)):
        da = int(a[i]) - borrow
        db = int(b[i]) if i < len(b) else 0
        if da < db:
            da += base
            borrow = 1
        else:
            borrow = 0
        result.append(str(da - db))

    return "".join(reversed(result))

def task1():
    a = "101101"
    b = "011011"

    a_r = a[::-1]
    b_r = b[::-1]

    carry = 0
    result = []
    carries = []

    for i in range(max(len(a_r), len(b_r))):
        da = int(a_r[i]) if i < len(a_r) else 0
        db = int(b_r[i]) if i < len(b_r) else 0
        s = da + db + carry
        result.append(str(s % 2))
        carry = s // 2
        carries.append(carry)

    if carry:
        result.append(str(carry))

    sum = "".join(reversed(result))

    print(f"1. {a} + {b} = {sum}, переносы: {list(reversed(carries))}")

task1()

def task2():
    a, b, base = "452", "341", 6
    sum = add_in_base(a, b, base)
    print(f"2. ({a}){base} + ({b}){base} = ({sum}){base}")

task2()

def task3():
    a, b, base = "725", "346", 8
    diff = sub_in_base(a, b, base)
    print(f"3. ({a}){base} - ({b}){base} = ({diff}){base}")

task3()

def task4():
    print("4.")
    for base, x, y in [(2, "1101", "1010"), (5, "243", "134"), (9, "758", "263")]:
        print(f"{base}: {x} + {y} = {add_in_base(x, y, base)}")

task4()

def task5():
    print("5.")
    for base, x, y in [(2, "1101", "0110"), (5, "432", "134"), (9, "758", "263")]:
        print(f"{base}: {x} 0 {y} = {sub_in_base(x, y, base)}")

task5()

def task6():
    a, b, base = "101101", "11011", 2
    sum = add_in_base(a, b, base)
    back_a = sub_in_base(sum, b, base).lstrip("0")
    back_b = sub_in_base(sum, a, base).lstrip("0")

    print(f"6. {a} -> {back_a}, {b} -> {back_b}")

task6()

def task78():
    print("7-8. чем меньше основание основание системы счисления, тем чаще возникают переносы")

task78()