-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathp16_9.py
59 lines (42 loc) · 1.04 KB
/
p16_9.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
def substract(a: int, b: int) -> int:
return a + flip_sign(b)
def multiply(a: int, b: int) -> int:
c_sum = 0
negative_other = b < 0
if negative_other:
b = flip_sign(b)
for _ in range(b):
c_sum += a
return c_sum if not negative_other else flip_sign(c_sum)
def divide(a: int, b: int) -> int:
if b == 0:
raise Exception("Cannot do zero division")
is_a_neg = a < 0
is_b_neg = b < 0
if is_a_neg:
a = flip_sign(a)
if is_b_neg:
b = flip_sign(b)
cprod = 0
x = -1
while cprod < a:
x += 1
cprod += b
return x if not is_a_neg ^ is_b_neg else flip_sign(x)
def flip_sign(a: int):
diff_driver = -1 if a > 0 else 1
new_a = 0
while a:
a += diff_driver
new_a += diff_driver
return new_a
if __name__ == "__main__":
exs = [
(10, 3),
(10, -3),
(-10, 3),
(-10, -3),
(-3, 12)
]
for a, b in exs:
print(f" {a} / {b} = {divide(a,b)}, {a} * {b} = {multiply(a,b)}")