【剑指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++对负数的左移运算没有定义,所以我们要将有符号数转为无符号数,再进行移位操作。

posted @ 2021-03-07 17:41  tmpUser  阅读(39)  评论(0)    收藏  举报
编辑推荐:
· Ribbon LoadBalancer: 开源的客户端式负载均衡框架
· EF Core:再谈普通实体关系与 Owned 关系的区别
· C++20新增属性[[no_unique_address]]详解
· 线上频繁FullGC?竟是Log4j2的这个“特性”坑了我
· 聊一聊 .NET 中的 CancellationTokenSource
阅读排行:
· 刚刚 Java 25 炸裂发布!让 Java 再次伟大
· 一款基于 .NET 开源美观、功能丰富的串口调试工具
· .NET 10 是微软 AI 战略的技术承重墙
· Runtime Async - 步入高性能异步时代
· AI 开发者工具 TOP 榜:9 大分类 + 20种工具
点击右上角即可分享
微信分享提示