剑指offer: 不用加减乘除做加法

题目描述:

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

 

思路分析:

由于不能直接使用四则运算,想到可以用位运算来解决。首先用异或运算可以求得未进位的相加和,即a^b;那么进位的求法可以通过与操作,得到在那几个位置产生了进位,同时进行左移,即将进位移动到对应位置上,(a&b)<<1。

那么两数相加就将进位的部分和未进位的部分相加即可,但由于不能直接用加法符号,因此通过循环递归做以上操作,直到没有进位,那么当前的未进位数就是所求的结果。

 

代码:

 1 class Solution {
 2 public:
 3     int Add(int num1, int num2)
 4     {
 5         
 6         while(num2!=0)
 7         {
 8             int Xor = num1^num2;
 9             int forward = (num1&num2)<<1;
10             num1 = Xor;
11             num2 = forward;
12         }
13         return num1;
14     }
15 };

 

posted @ 2019-06-18 22:05  Fzu_LJ  阅读(103)  评论(0编辑  收藏  举报