【剑指 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; } }