2021-03-07 17:41阅读: 37评论: 0推荐: 0

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

问题

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

解答

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

重点思路

无进位和异或运算 规律相同,进位与运算 规律相同(并需左移一位)。因此,无进位和n与进位c的计算公式如下:

由于n(无进位和)+c(进位和)部分也不能使用加法,我们可以将无进位和进位和作为新的ab再做相同的计算,直到进位和为0。

由于C++对负数的左移运算没有定义,所以我们要将有符号数转为无符号数,再进行移位操作。

本文作者:tmpUser

本文链接:https://www.cnblogs.com/tmpUser/p/14495564.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @ 2021-03-07 17:41  tmpUser  阅读(37)  评论(0)    收藏  举报
编辑推荐:
· 糊涂啊!这个需求居然没想到用时间轮来解决
· 浅谈为什么我讨厌分布式事务
· 在 .NET 中使用内存映射文件构建高性能的进程间通信队列
· 一个 java 空指针异常的解决过程
· 揭开 SQL Server 和 PostgreSQL 填充因子的神秘面纱
阅读排行:
· 从硬盘爆满到 GitHub 封号,一位前端开发者的开源历险记
· 微软又一自动化开源王炸,Selenium 慌了!
· 微服务的10大问题
· C#解析JSON数据全攻略
· 上周热点回顾(7.14-7.20)
点击右上角即可分享
微信分享提示