【剑指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(进位和)
部分也不能使用加法,我们可以将无进位和与进位和作为新的a
与b
再做相同的计算,直到进位和为0。
由于C++对负数的左移运算没有定义,所以我们要将有符号数转为无符号数,再进行移位操作。
本文作者:tmpUser
本文链接:https://www.cnblogs.com/tmpUser/p/14495564.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 糊涂啊!这个需求居然没想到用时间轮来解决
· 浅谈为什么我讨厌分布式事务
· 在 .NET 中使用内存映射文件构建高性能的进程间通信队列
· 一个 java 空指针异常的解决过程
· 揭开 SQL Server 和 PostgreSQL 填充因子的神秘面纱
· 从硬盘爆满到 GitHub 封号,一位前端开发者的开源历险记
· 微软又一自动化开源王炸,Selenium 慌了!
· 微服务的10大问题
· C#解析JSON数据全攻略
· 上周热点回顾(7.14-7.20)