Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- 117 + 4 = 121
- '''
- from collections import deque
- def add(a, b):
- a_i = len(a) -1
- b_i = len(b) - 1
- carry = 0
- ans = deque()
- while a_i >= 0 or b_i >= 0 or carry > 0 :
- sum = 0
- if a_i >= 0:
- sum += int(a[a_i])
- if b_i >= 0:
- sum += int(b[b_i])
- sum += carry
- ans.appendleft(sum%10)
- carry = sum//10
- a_i -= 1
- b_i -=1
- ans_str = ""
- for digit in ans:
- ans_str += str(digit)
- return ans_str
- def subtract(a,b):
- # find out if negative
- is_neg = False
- if len(b) > len(a):
- is_neg = True
- if len(a) == len(b):
- for i,digit in enumerate(a):
- if digit < b[i]:
- is_neg = True
- break
- if is_neg:
- a,b = b,a
- a_i = len(a) - 1
- b_i = len(b) - 1
- carry = 0
- ans = deque()
- while a_i >= 0 or b_i >= 0 or carry != 0 :
- diff = 0
- if a_i >= 0:
- diff += carry + int(a[a_i])
- if b_i >= 0:
- if a[a_i] < b[b_i]:
- carry = -1
- diff += 10
- else:
- carry = 0
- diff -= int(b[b_i])
- ans.appendleft(diff)
- ans_str = ""
- if is_neg:
- ans_str += "-"
- if ans[0] == 0:
- leading_0 = True
- for digit in ans:
- if digit == 0 and leading_0:
- continue
- if digit != 0:
- leading_0 = False
- ans_str += str(digit)
- if ans_str == "":
- return "0"
- return ans_str
- def add_w_negs(a,b):
- if a[0] == "-" and b[0] == "-":
- ans = add(a[1:], b[1:])
- ans = "-" + ans
- elif a[0] == "-":
- ans = subtract(b, a[1:])
- elif b[0] == "-":
- ans = subtract(a, b[1:])
- else:
- ans = add(a,b)
- return ans
- def subtract_w_negs(a,b):
- if a[0] == "-" and b[0] == "-":
- ans = subtract(b[1:], a[1:])
- elif a[0] == "-":
- ans = add(b, a[1:])
- ans = "-" + ans
- elif b[0] == "-":
- ans = add(a, b[1:])
- else:
- ans = subtract(a,b)
- return ans
Advertisement
Add Comment
Please, Sign In to add comment