剑指offer42:不用加减乘除做加法

Posted WenJieWangFlyToWorld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer42:不用加减乘除做加法相关的知识,希望对你有一定的参考价值。

技术分享

分析:

(1)十进制加法分三步:(以5+17=22为例)

1. 只做各位相加不进位,此时相加结果为12(个位数5和7相加不进位是2,十位数0和1相加结果是1);

2. 做进位,5+7中有进位,进位的值是10;

3. 将前面两个结果相加,12+10=22

(2)这三步同样适用于二进制位运算

1.不考虑进位对每一位相加。0加0、1加1结果都是0,0加1、1加0结果都是1。这和异或运算一样;

2.考虑进位,0加0、0加1、1加0都不产生进位,只有1加1向前产生一个进位。可看成是先做位与运算,然后向左移动一位

3.相加过程重复前两步,直到不产生进位为止

代码如下:

 
    1. // 不用加减乘除做加法  
    2.     public int Add(int num1, int num2) {  
    3.         int sum = num1 ^ num2;  
    4.         int jinwei = (num1 & num2) << 1;  
    5.         return jinwei == 0 ? sum : Add(sum, jinwei);  
    6.     }  

扩展题目:

不使用新的变量,交换两个变量的值
方法一:基于加减法

[cpp] view plain copy
 
  1. a = a + b;  
  2. b = a - b;  
  3. a = a - b;  

方法二:基于异或运算

[cpp] view plain copy
 
    1. a = a ^ b;  
    2. b = a ^ b;  
    3. a = a ^ b;  

以上是关于剑指offer42:不用加减乘除做加法的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 不用加减乘除做加法

剑指offer python版 不用加减乘除做加法

剑指offer系列——剑指 Offer 65. 不用加减乘除做加法

剑指offer不用加减乘除做加法

剑指offer---不用加减乘除做加法

剑指 Offer 65. 不用加减乘除做加法