quate

Untitled

Jan 25th, 2023
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. '''
  2. 117 + 4 = 121
  3. '''
  4.  
  5. from collections import deque
  6.  
  7. def add(a, b):
  8. a_i = len(a) -1
  9. b_i = len(b) - 1
  10. carry = 0
  11. ans = deque()
  12. while a_i >= 0 or b_i >= 0 or carry > 0 :
  13. sum = 0
  14. if a_i >= 0:
  15. sum += int(a[a_i])
  16. if b_i >= 0:
  17. sum += int(b[b_i])
  18.  
  19. sum += carry
  20.  
  21. ans.appendleft(sum%10)
  22. carry = sum//10
  23. a_i -= 1
  24. b_i -=1
  25.  
  26. ans_str = ""
  27. for digit in ans:
  28. ans_str += str(digit)
  29.  
  30. return ans_str
  31.  
  32.  
  33.  
  34. def subtract(a,b):
  35. # find out if negative
  36. is_neg = False
  37. if len(b) > len(a):
  38. is_neg = True
  39. if len(a) == len(b):
  40. for i,digit in enumerate(a):
  41. if digit < b[i]:
  42. is_neg = True
  43. break
  44.  
  45. if is_neg:
  46. a,b = b,a
  47.  
  48. a_i = len(a) - 1
  49. b_i = len(b) - 1
  50. carry = 0
  51. ans = deque()
  52. while a_i >= 0 or b_i >= 0 or carry != 0 :
  53. diff = 0
  54. if a_i >= 0:
  55. diff += carry + int(a[a_i])
  56. if b_i >= 0:
  57. if a[a_i] < b[b_i]:
  58. carry = -1
  59. diff += 10
  60. else:
  61. carry = 0
  62. diff -= int(b[b_i])
  63.  
  64. ans.appendleft(diff)
  65.  
  66. ans_str = ""
  67. if is_neg:
  68. ans_str += "-"
  69.  
  70. if ans[0] == 0:
  71. leading_0 = True
  72. for digit in ans:
  73. if digit == 0 and leading_0:
  74. continue
  75.  
  76. if digit != 0:
  77. leading_0 = False
  78.  
  79. ans_str += str(digit)
  80.  
  81. if ans_str == "":
  82. return "0"
  83.  
  84. return ans_str
  85.  
  86.  
  87. def add_w_negs(a,b):
  88. if a[0] == "-" and b[0] == "-":
  89. ans = add(a[1:], b[1:])
  90. ans = "-" + ans
  91.  
  92. elif a[0] == "-":
  93. ans = subtract(b, a[1:])
  94.  
  95. elif b[0] == "-":
  96. ans = subtract(a, b[1:])
  97.  
  98. else:
  99. ans = add(a,b)
  100. return ans
  101.  
  102. def subtract_w_negs(a,b):
  103. if a[0] == "-" and b[0] == "-":
  104. ans = subtract(b[1:], a[1:])
  105.  
  106. elif a[0] == "-":
  107. ans = add(b, a[1:])
  108. ans = "-" + ans
  109.  
  110. elif b[0] == "-":
  111. ans = add(a, b[1:])
  112.  
  113. else:
  114. ans = subtract(a,b)
  115. return ans
  116.  
Advertisement
Add Comment
Please, Sign In to add comment