题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:
我们以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;
}
}
网友评论