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

剑指 Offer 65. 不用加减乘除作加法

知识点:数学;位运算函数

题目描述

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

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

解法一:位运算

不能用四则运算,那其实能够用的只要逻辑运算和位运算了,这里很明显要用位运算。关键怎么用呢。leetcode

咱们列一张表其实就能够发现,两个元素若是没有进位也就是否是对应位都是1的时候,相加就和异或运算的结果是同样的;若是有进位,也就是两位上都是1的时候,相加就是二者相与而后左移一位;因此咱们就能够作了。get

能够依次获得两个数的异或结果和与结果;
sum=a+b=sum+carry;可是求得这两个后仍是要加,因为不能用加法,因此能够再求这两个结果的与结果和异或结果。直到最后进位的为0,sum就是答案了。数学

class Solution {
    public int add(int a, int b) {
        int sum = a^b;  //无进位的;
        int carry = (a&b) << 1;  //有进位的;
        while(carry != 0){  //进位为0的时候返回sum;
            a = sum;
            b = carry;
            sum = a^b;
            carry = (a & b) << 1;
        }
        return sum;   
    }
}

相关连接

不用加减乘除作加法(位运算,清晰图解)io

相关文章
相关标签/搜索