[CareerCup] 18.1 Add Two Numbers 兩數相加


 

18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators.

 

這道題讓我們實現兩數相加,但是不能用加號或者其他什么數學運算符號,那么我們只能回歸計算機運算的本質,位操作Bit Manipulation,我們在做加法運算的時候,每位相加之后可能會有進位Carry產生,然后在下一位計算時需要加上進位一起運算,那么我們能不能將兩部分拆開呢,我們來看一個例子759+674

1. 如果我們不考慮進位,可以得到323

2. 如果我們只考慮進位,可以得到1110

3. 我們把上面兩個數字假期323+1110=1433就是最終結果了

然后我們進一步分析,如果得到上面的第一第二種情況,我們在二進制下來看,不考慮進位的加,0+0=0, 0+1=1, 1+0=1, 1+1=0,這就是異或的運算規則,如果只考慮進位的加0+0=0, 0+1=0, 1+0=0, 1+1=1,而這其實這就是與的運算,而第三步在將兩者相加時,我們再遞歸調用這個算法,終止條件是當進位為0時,我們直接返回第一步的結果,參見代碼如下:

 

int add(int a, int b) {
    if (b == 0) return a;
    int sum = a ^ b;
    int carry = (a & b) << 1;
    return add(sum, carry);
}

 

CareerCup All in One 題目匯總


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM