剑指Offer的学习笔记(C#篇)-- 不用加减乘除做加法

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

一 . 理解题目

        这个题目可以让我们回归到小学,想想加法的竖式是怎么写的,哈哈,如果当时你不是那个竖式写错了,是不是就不在3班了?是不是就不会在这里写什么这这这..... 海绵宝宝,这就是人生啊。。

        回归题目:加法的竖式无非三步走,一、个位数相加;二、个位数进位(或者不进位);三、十位数相加。后面的都是一样了,不一一赘述。

        但是,此题目不可用加减乘除,所以要借用二进制数的位运算符。当然目的也是和上面一样,相加(^)与进位(&配合<<1)!!

        该题目必须要理解位运算符,可查看这里

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

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

        第三部:判断(当在第二部得出进位的数是0的时候,就可以输出了)

二 . 代码实现

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;
    }
}

 

posted @ 2019-06-02 22:53  WeiMLing  阅读(269)  评论(0编辑  收藏  举报