leetcode 371 不用加减求两数之和

//方法一,递归版
//Time::O(n),Space:O(1)
class Solution 
{
public:
    int Add(int num1, int num2)
    {
        return num2==0?num1:Add(num1^num2,(num1&num2)<<1);
    }
};
//方法二,迭代版
//Space::O(1),Time::O(n)
//这种位运算的方法就是,数字电路实现加法的具体实现。
//考察你有没有计算机底层知识以及思维
class Solution 
{
public:
    int Add(int num1, int num2)
    {
        while(num2!=0)
        {
            int sum=num1^num2;
            int carry=(num1&num2)<<1;
            
            num1=sum;
            num2=carry;
        }
        
        return num1;
    }
};
//方法三,用内嵌汇编的方法来具体实现,以下代码在gcc编译期下实现
class Solution {
public:
    int getSum(int a, int b) 
    {
        int ret=0;

        asm volatile
        (
                    "movl %%eax,%%ecx\n"
                    "addl %%ebx,%%ecx\n"
                    :"=c"(ret)
                    :"a"(a),"b"(b)
        );

        return ret;
    }
};

 

posted @ 2020-01-06 22:06  repinkply  阅读(4)  评论(0)    收藏  举报