สมมติว่าเรามีจำนวนเต็มสองจำนวน a และ b ภารกิจของเราคือหาผลรวมของสองจำนวนเต็มนี้ ข้อจำกัดหนึ่งคือ เราไม่สามารถใช้ตัวดำเนินการอย่าง + หรือ - ได้ เช่นถ้า a = 5 และ b = 7 ผลลัพธ์จะเป็น 12
วิธีการแก้ปัญหา
- ในการแก้ เราจะใช้ตัวดำเนินการบิตเวส (bitwise logical operators)
- ถ้า b = 0 ให้คืนค่า a
- มิฉะนั้น เรียกฟังก์ชันผลรวมแบบเรียกซ้ำโดยให้ a XOR b และ a AND b หลังเลื่อนซ้ายผลลัพธ์หนึ่งครั้ง
ตัวอย่าง (Python)
เนื่องจากโค้ดต้นฉบับเป็น C++ นี่คือการแปลงเป็น Python:
class Solution:
def getSum(self, a, b):
# ใช้การดำเนินการบิตเวสเพื่อบวกโดยไม่ใช้ + หรือ -
while b != 0:
carry = a & b
a = a ^ b
b = carry << 1
return a
ob1 = Solution()
print(ob1.getSum(5, 7))
อินพุต
a = 5 b = 7
เอาต์พุต
12