lintcode第一题 A+B问题

来源:互联网 发布:论文抄袭软件 编辑:程序博客网 时间:2024/06/05 16:07

给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。

 注意事项

你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。

说明

a和b都是 32位 整数么?

  • 是的

我可以使用位运算符么?

  • 当然可以
样例

如果 a=1 并且 b=2,返回3

int aplusb(int a, int b) {
    // write your code here
    if(a==0)return b;
    if(b==0)return a;
    int x1=a^b;
    int x2=(a&b)<<1;
    return aplusb(x1,x2);    
}

首先要知道int类型在计算机中的存储方法,其中负值是存储的补码。通过异或操作和与,经过迭代可以实现加法的计算。

比如6+3:

6的二进制是0000 0110,3的二进制是0000 0011,那么计算如下:

第一次迭代:x1=0000 0101,x2*=0000 0010,x2=0000 0100(左移一位)

第二次迭代:x1=0000 0001,x2*=0000 0100,x2=0000 1000

第三次迭代:x1=0000 1001,x2*=0000 0000,x2=0000 0000,此时出现了0,就可以返回x1的值了,也就是计算结束

得到结果为9,计算结束。


原创粉丝点击