【剑指offer】65 不用加减乘除做加法

面试题65. 不用加减乘除做加法

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

示例:

输入: a = 1, b = 1
输出: 2

做题思路:

这里使用13二进制为:1101,9二进制为:1001来做例子。

异或 1^1 = 0 ,1^0 = 1,0^0 = 0.从这三个结果可以看出异或就是在做加法,但是没有进位。

与     1&1 = 1,1&0 = 0,0&0 = 0.从这三个结果可以看出与就是跟进位有关。

没有进位:1101和1001异或的结果:0100

进位:1101和1001与的结果:1001,答案是这个吗?显然不是,因为是进位,所以需要左移10010;

没有进位:10110

进位:0

输出10110 = 2^4+2^2+2^1 = 22

代码展示:

class Solution {
    public int add(int a, int b) {
         int jinwei = 0;
        int bujinwei = 0;
        while(b != 0){
            bujinwei = a^b;
            jinwei = (a&b)<<1;
            a = bujinwei;
            b = jinwei;
        }
        return a;
    }
}
发布了139 篇原创文章 · 获赞 93 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_43271086/article/details/105554630
今日推荐