diff --git a/01-aritmetika/aritmetika.py b/01-aritmetika/aritmetika.py index f0fe53da8559321c01d3ca436b3635bfca6d608a..5a7755bd177c19978e22d69f43c04e6970f273fe 100755 --- a/01-aritmetika/aritmetika.py +++ b/01-aritmetika/aritmetika.py @@ -2,11 +2,14 @@ # Aritmetické algoritmy pracující po číslicích # Číslo je reprezentované seznamem číslic počínaje _nejnižším_ řádem -def nacti(): - return [ int(x) for x in reversed(input()) ] + +def z_retezce(s): + return [int(x) for x in reversed(s)] + def na_retezec(a): - return "".join([ str(x) for x in reversed(a) ]) + return "".join([str(x) for x in reversed(a)]) + def secti(a, b): if len(a) < len(b): @@ -29,6 +32,42 @@ def secti(a, b): return c + +def secti2(a, b): + n = max(len(a), len(b)) + a += [0] * (n - len(a)) + b += [0] * (n - len(b)) + + c = [] + prenos = 0 + + for i in range(n): + s = a[i] + b[i] + prenos + c.append(s % 10) + prenos = s // 10 + + if prenos > 0: + c.append(prenos) + + return c + + +def odecti(a, b): + n = max(len(a), len(b)) + a += [0] * (n - len(a)) + b += [0] * (n - len(b)) + + c = [] + prenos = 0 + + for i in range(n): + s = a[i] - b[i] + prenos + c.append(s % 10) + prenos = s // 10 + + return c + + def vynasob_cislici(a, cislice): c = [] prenos = 0 @@ -43,6 +82,7 @@ def vynasob_cislici(a, cislice): return c + def vynasob(a, b): c = [] @@ -52,8 +92,10 @@ def vynasob(a, b): return c + # Příklad použití: -a = nacti() -b = nacti() -print("Součet:", na_retezec(secti(a, b))) +a = z_retezce(input("a=")) +b = z_retezce(input("b=")) +print("Součet:", na_retezec(secti2(a, b))) +print("Rozdíl:", na_retezec(odecti(a, b))) print("Součin:", na_retezec(vynasob(a, b)))