美文网首页
发散思维:不用加减乘除做加法

发散思维:不用加减乘除做加法

作者: I讨厌鬼I | 来源:发表于2019-05-08 00:15 被阅读0次

    题目描述

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

    输入:

    1,1
    

    输出:

    2
    

    思路:

    真是奇奇怪怪的要求。加法运算的实质是相加和进位,对于二进制加法来说,相加这一步我们可以使用异或来完成,而进位的过程可以用与运算再左移来完成。例如3+2011B +010B,我们先011B^010B=001B,然后(011B&010B)<<1=100B2数相加就变成了异或的结果和进位的结果相加,我们在进行一次加法,001B^100B=101B(001B&100B)<<1=000B,进位没有了,也就得到了最终的结果101B=5。解释起来不容易,能够想到这样的方法也就更不容易了,只能看到一次记下来了。

    代码:

    public class Solution {
        public int Add(int num1,int num2) {
            while(num2 != 0){
                int tmp = num1^num2;
                num2 = (num1&num2)<<1;
                num1 = tmp;
            }
            return num1;
        }
    }
    

    相关文章

      网友评论

          本文标题:发散思维:不用加减乘除做加法

          本文链接:https://www.haomeiwen.com/subject/mmfpoqtx.html