概述
不使用加减乘除,那就只剩位移,异或,与运算,或运算。
可以确定的是只能按位分析,我们按位分析发现,每一位相加的结果是异或预算,那么下一位的结果跟进位有关,分析发现,进位是与运算的结果。
那我们就把a和b看成二进制,对于二进制的每一位进行异或运算,保存为结果的当前位,进行与运算保存为结果位的进位,之后不断循环,直到没有进位。
需要注意的是测试数据有负数,所以转换成无符号整数。
不算简单吧,还是要分析一波。
class Solution {
public:
int add(int a, int b) {
while(b!=0)
{
int per=(unsigned int)(a&b)<<1;
a^=b;
b=per;
}
return a;
}
};
有个点我不是很明白,就是为什么这个无符号转换在这个地方,在那之前把a和b都转换成无符号整数,把per也定义成无符号整数为什么不行。
最后
以上就是动人镜子为你收集整理的剑指 Offer 65. 不用加减乘除做加法的全部内容,希望文章能够帮你解决剑指 Offer 65. 不用加减乘除做加法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复