一刷剑指offer(47)——不用加减乘除做加法

题目:
写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除四则运算符号。

求两数之和四则运算不可用,也就是说,只能用位运算。

分析一下十进制加法的步骤:

1、各位相加不进位

2、做进位

3、将前面两个结果加起来

转换成位运算:

1、不考虑进位,0+0=0,1+1=0,0+1=1,1+0=1,显然为异或运算。

2、只有1+1才会产生进位,可以想象成两个数先做位与运算,然后再向左移动一位。

3、把前面两个步骤结果相加

int Add(int num1,int num2)
{
    int sum,carry;
    do
    {
        sum=num1^num2;
        carry=(num1&num2)<<1;
        num1=sum;
        num2=carry;
    }while(num2!=0);
    return num1;
}

 

你可能感兴趣的:(剑指offer,数据结构与算法)