基础编程题之不用加减乘除做加法
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础编程题之不用加减乘除做加法相关的知识,希望对你有一定的参考价值。
题目
解题思路
这种题其实有非常多的解法,这里我们一定要掌握一种效率最高的算法,那就是利用位运算,其本质也就是二进制的加法
在十进制中,我们做加法一般遵循以下三步:以5+7为例
- 首先从个位开始相加,不要算进位,得到2
- 接着计算进位的值,为10
- 如果进位的值为0,那么直接结束,可以结束计算或者进行下一位;像第二步那种情况,进位为1,所以给十位进位。
而在二进制中,其实也是遵循三个步骤:以5+7为例,其二进制分别为101和111
- 首先把每一位进行相加,得到010,而这样的操作其本质就是异或运算,因为异或运算是相异为1,相同为0,相异也就是意味着一个数一定是0,一个数一定是1
- 然后计算进位值,也即1010,其实就是每一位进行与运算得到101后再左移一位,得到1010,即(1010 & 111) << 1。
- 可以发现进位值不为用,所以重复先前两步,而现在的两个操作变成了相加后的结果010和进位值1010。(异或运算结果:010 ^ 1010=1000;进位值为:(010 & 1010) << 1)一直重复到进位值为0结束运算即可。
代码
class Solution {
public:
int Add(int num1, int num2)
{
while(num2)//num2作为进位值
{
int sum=num1 ^ num2;//不算进位后的相加结果
int carry=(num1 & num2) << 1;//进位
num1=sum;
num2=carry;
}
return num1;
}
};
以上是关于基础编程题之不用加减乘除做加法的主要内容,如果未能解决你的问题,请参考以下文章