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()