题解:不用加减乘除做加法

    技术2024-12-06  14

    [题目链接](https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/) 写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。

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

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

    思路:加法由俩部分组成,即进位和非进位 示例:如 0110 和 0011 非进位位置:俩个数字异或的结果为非进位 进位位置: 俩个数字相与如果为1即俩个位置都为1,再左移一位即是进位; 循环控制:控制进位,如果进位不为0,则一直相与;

    注意事项:如果测试用例为负数,需要强转为无符号整型unsigned int

    class Solution { public: int add(int a, int b) { while(b) { int c = ((unsigned int)(a&b))<< 1; a ^= b; b = c; } return a; } };
    Processed: 0.255, SQL: 12