不用加减乘除做加法

2020-05-09  本文已影响0人  周英杰Anita

题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路:

我们以5+17为例,首先看下十进制加法的计算过程:
第一步是各位相加不进位,结果是12(个位数5和7相加不要进位是2,十位数0和1相加是1,也就是结果等于2+10);
第二步是做进位,个位5+7的进位是10,10位没有进位,因此进位的结果是10;
第三步是将前面两个结果加起来,就是最终结果,12+10 = 22
再看二进制:
5的二进制是101,17的二进制是10001,仍然是分三步走:
第一步,不考虑进位,对每一位相加,0加0,1+1,结果都是0,1+0,0+1,结果都是1,可以看出这个异或的结果一致;
第二步,考虑进位,0+0,0+1,1+0都不会产生进位,只有1+1会有进位,我们可以想象成,先做位与运算,再左移一位。
第三步,仍然是将前面两步的结果相加;相加的过程仍然是重复前两步,直到不产生进位为止。

python2.7解法:

# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        while num2 != 0:
            num = num1 ^ num2
            carry = (num1 & num2) << 1
            num1 = num
            num2 = carry
        return num1

java解法:

class Solution {
    public int add(int a, int b) {
        while(b!=0)
        {
            int sumn = a ^ b;
            int carry = (a & b) << 1;
            a = sumn;
            b = carry;
        }
        return a;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读