LeetCode|371. 兩整數之和


題目描述

  • 等級: 簡單

不使用運算符 + 和 - ,計算兩整數a 、b之和。code

示例1:blog

輸入: a = 1, b = 2
輸出: 3

示例2:get

輸入: a = -2, b = 3
輸出: 1

思路

對於位運算的考察。class

在位運算中,異或操做獲取的是兩個數的無進位和,異或:相同爲0,不一樣爲1。 如,循環

2^3
  0010
^ 0011
-------
  0001

咱們知道,2+3=5,5的二進制是0101。前面已經知道了無進位和,下面獲取進位的數: 看a&b二進制

2&b
  0010
& 0011
--------
  0010

發現結果左移1位就是最終結果的進位數:im

0010 << 1 = 0100

0100再異或0001:img

0100
^ 0001
-------
  0101

這樣循環操做,直到進位數爲0。co

答案

func getSum(a int, b int) int {
	for b != 0 {
		temp := (a & b) << 1
		a = a ^ b
		b = temp
	}
	return a
}

結果

371.png


tencent.jpg

相關文章
相關標籤/搜索