不用加法实现a+b

作者: Neulana | 来源:发表于2016-04-15 15:00 被阅读1127次

这到算法题好像经常出现在面试题集锦里面,反正我是看见它好多次了。不用加法实现两个数的和,我们可以首先想到位运算,那么怎么才能通过位运算实现加法呢?

异或运算有个别名叫做不进位加法,A^B得到的值就是各位上出去后面进上来的进位后它该有的值,那么问题就转化成它的哪些位是有进位的。我们知道只有1+1才能产生进位,也只有1&1的结果才是1,所以我们可以将两个数做一次与运算来模拟产生进位的位置。但是,进位是要“进”到前一位,所以我们还需要将A&B的计算结果左移一位,然后再和前面的A&B的结果相加,但是人家题目说了不能使用加法,所以致力还是不能直接相加,那怎么办呢?没关系,继续按照我们这里实现的这种加法加。只不过两个参数不再是A和B了,而是(A^B)和((A&B)<<1)......

我们应该想到这里面肯定会用到循环,因为加法里面还有加法啊。那什么时候循环结束呢?当加法中表示进位的数为0时,不用再进行继续下一次加法了。

好了,原理说明白了,直接上代码吧。

public int aplusb(int a, int b) {
           while (b != 0) {
            int _a = a ^ b;
            int _b = (a & b) << 1;
            a = _a;
            b = _b;
        }
        return a;
    }

更多文章,欢迎访问个人博客我的博客

相关文章

  • 不用加法实现a+b

    这到算法题好像经常出现在面试题集锦里面,反正我是看见它好多次了。不用加法实现两个数的和,我们可以首先想到位运算,那...

  • 小学数学简便运算(转)

    一、简算方法 1、运算定律 加法: 加法交换律a+b=b+a 加法结合律(a+b)+c=a+(b+c) 乘法: 乘...

  • 高精度整数——1. a+b

    a+b问题 题目描述 实现一个加法器,使其能够输出a+b的值。 输入描述: 输入包括两个数a和b,其中a和b的位数...

  • 不用加号实现加法

    题目说明 这是一道在lintcode上的简单题:http://lintcode.com/en/problem/a-...

  • TJOJ 1000 以及OJ使用注意事项

    v1.0.01a 菜如我 TJ-SSE A+B problem 以及oj使用问题 1. 简单的加法运算"A+B ...

  • 四年级数学运算律、性质和规律的整理

    一、加法 加法交换律:a+b=b+a 加法结合律:a+b+c=a+(b+c) 二、乘法 乘法交换律:a×b=b×a...

  • 上交OJ-1014. 高精度加法

    1014. 高精度加法 Description 输入2个整数a和b,输出a+b。 Input Format 输入有...

  • 不用加减乘除实现加法

    其中 异或运算相当于对两个数进行 “不进位” 的加法,与运算并向左移一位得到两个数的加法进位,接下去重复上述过程,...

  • 运算定律知识点汇总

    加法的交换律 定义:两个数相加,交换加数的位置,和不变,这叫做叫法的交换律。 公式:a+b=b+a 加法的结合律 ...

  • 幼升小衔接·数学学习笔记·加法​

    大家好,我是小肉丸懒懒。 今天我们来学加法。​ 加法:把两个数合并成一个数的运算。 常用公式:a+b=c c-a=...

网友评论

本文标题:不用加法实现a+b

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