1. 程式人生 > >【LeetCode & 劍指offer刷題】發散思維題5:65 不用加減乘除做加法

【LeetCode & 劍指offer刷題】發散思維題5:65 不用加減乘除做加法

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...)

65 不用加減乘除做加法

題目描述

寫一個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算子號。   /* 用三步走的方式計算二進位制值相加: 5-101 7-111 第一步:相加各位的值,不算進位,得到 010 ,二進位制每位相加就相當於各位做異或操作, 101^111 第二步:計算進位值,得到
1010 ,相當於各位做與操作得到 101 ,再向左移一位得到 1010 (101&111)<<1 第三步重複上述兩步, 各位相加 010^1010=1000 ,進位值為 100=(010&1010)<<1      繼續重複上述兩步: 1000^100 = 1100 ,進位值為 0 ,跳出迴圈, 1100 為最終結果。 */
class Solution { public :     int Add ( int num1 , int num2 )     {         int sum = num1
;         int carry = num2 ;         while(carry != 0)         {             sum = num1 ^ num2 ; // 用異或代替加運算(不考慮進位)             carry = ( num1 & num2 ) << 1 ; // 用與運算+左移運算代替進位                         num1 = sum ;             num2 = carry ;         }         return sum ;     } };