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

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

示例:

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

提示:

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

位运算^和&的简单操作。

异或找到不需要进位的情况。
相与找到需要进位的情况。然后左移一位模拟进位。
不停循环直到进位的值为零时,即两数异或就是两个数的和的情况。

#include <iostream>
using namespace std;

class Solution {
public:
    int add(int a, int b) {

        int n, m;
        while (b != 0) {
            //这是无进位的情况。
            n = a ^ b;
            //进位的。
            m = (unsigned int)(a & b) << 1; // 转换成无符号数。可能有负数的情况。
            a = n;
            b = m;  // 一直到进位的情况为 0,退出循环。
        }
        return a;
    }
};

int main(){
    int mya=9,myb=3;
    Solution S;
    cout<<S.add(mya,myb)<<endl;
    system("pause");
    return 0;
}

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页