Last active
September 19, 2021 16:43
-
-
Save Nasdin/1f47679877222b1ec0107750862979bf to your computer and use it in GitHub Desktop.
How to sum, without using + or - in Python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def sum_bits(larger, smaller): | |
| """ Sum but using bits, only positive numbers""" | |
| top_down_sum = larger ^ smaller | |
| carry = (larger & smaller) << 1 | |
| if carry > 0: | |
| return sum_bits(top_down_sum, carry) | |
| return top_down_sum | |
| def sub_bits(larger, smaller): | |
| """Subtraction but using bits, only positive numbers""" | |
| top_down= larger ^ smaller | |
| borrow = ((~larger) & smaller) << 1 | |
| while borrow > 0: | |
| return sub_bits(top_down, borrow) | |
| return top_down | |
| def sum(larger_number:int, smaller_number:int): | |
| """ Sum function, in O(1) time and space, using bitwise operators | |
| Can sum positive with negative and any combination | |
| """ | |
| abs_larger = abs(larger_number) | |
| abs_smaller = abs(smaller_number) | |
| if abs_larger < abs_smaller: | |
| return sum(smaller_number, larger_number) | |
| to_plus = larger_number* smaller_number >= 0 | |
| sign = 1 if larger_number > 0 else -1 | |
| if to_plus: | |
| return sum_bits(abs_larger, abs_smaller) * sign | |
| else: | |
| return sub_bits(abs_larger, abs_smaller) * sign | |
| print(sum(5, 5)) | |
| # >> 10 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment