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

【题目】

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

 

示例:

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

 

提示:

    a, b 均可能是负数或 0
    结果不会溢出 32 位整数

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof

【思路】

^异或 相当于无进位的求和
&与 相当于求每位的进位数
 
先求两个数无进位的和,然后将进位信息保存到b中,依次将进位加到a上,直到没有进位的情况(b=0)
 
【代码】
class Solution {
    public int add(int a, int b) {
         int sum =a;
        //^异或 相当于无进位的求和
        //&与 相当于求每位的进位数
        while(b!=0){
            sum = a^b;
            b = (a&b)<<1;
            a = sum;
        }
    return sum;
    }
}

 

 
 
posted @ 2023-04-12 10:12  梦想是能睡八小时的猪  阅读(23)  评论(0)    收藏  举报