劍指Offer的學習筆記(C#篇)-- 不用加減乘除作加法

題目描述

寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。

一 . 理解題目

        這個題目能夠讓咱們迴歸到小學,想一想加法的豎式是怎麼寫的,哈哈,若是當時你不是那個豎式寫錯了,是否是就不在3班了?是否是就不會在這裏寫什麼這這這..... 海綿寶寶,這就是人生啊。。html

        迴歸題目:加法的豎式無非三步走,1、個位數相加;2、個位數進位(或者不進位);3、十位數相加。後面的都是同樣了,不一一贅述。函數

        可是,此題目不可用加減乘除,因此要借用二進制數的位運算符。固然目的也是和上面同樣,相加(^)與進位(&配合<<1)!!spa

        該題目必需要理解位運算符,可查看這裏code

        第一步:相加不進位(^ 完成)htm

        第二部:進位(&配合<<1)blog

        第三部:判斷(當在第二部得出進位的數是0的時候,就能夠輸出了)get

二 . 代碼實現

class Solution
{
    public int Add(int num1, int num2)
    {
        // write code here
        while(num2!=0)
        {
            //不進位的二進制加法
            int sum=num1^num2;
            //把位運算符&理解成邏輯運算與;<<爲左移運算符,後面跟幾就移動幾位
            int carray=(num1&num2)<<1;
            num1=sum;
            num2=carray;
        }
        return num1;
    }
}
相關文章
相關標籤/搜索