题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:
使用位运算
第一步不考虑进位,对每一位直接相加,1加0和0加1都等于1,0加0和1加1都等于0,这和异或的结果相同
第二步考虑进位,只有1加1会产生进位,因此先按位与,结果为1的位置需要向前进1位,即<<1
第三步用同样的方法将两个结果相加
循环知道没有进位为止
# -*- coding:utf-8 -*-
class Solution:
def Add(self, num1, num2):
while num2 != 0:
sum_ = num1 ^ num2
carry = (num1 & num2) << 1
num1 = sum_
num2 = carry
return num1
用python写超时了。。
改用C写:
class Solution {
public:
int Add(int num1, int num2)
{
int sum,carry;
while (num2!=0){
sum = num1 ^ num2;
carry = (num1 & num2) << 1;
num1 = sum;
num2 = carry;
}
return num1;
}
};
编译通过。