首页 > 其他 > 详细

剑指offer:不用加减乘除做加法

时间:2020-03-14 15:14:45      阅读:53      评论:0      收藏:0      [点我收藏+]

题意描述

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

解题思路

位运算

首先来看十进制加法如何计算的(33+59)

  1. 相加各位的值,不进位,结果是82,(3+9 = 12,舍弃进位就是2。3+5=8,没有进位是8)
  2. 计算进位,结果就是10
  3. 将上述的到的两个值重复步骤1和步骤2,直到进位为0,返回不进位的值。
  4. 82+10 (各位相加,不进位是92。进位是0,返回92)

对于二进制也可以使用相同的方法

  1. 相加各位的值,不进位,结果是26(100001+111011 = 011010),就是相同得0,不同得1。符合异或运算,可以使用^进行计算。
  2. 计算进位,也就是只保留相同的位,(100001+111011 = 100001),既然是进位制,所以还应该左移一位,得到1000010,在位运算中可以用(num1 & num2) << 1表示。
  3. 重复上述步骤,直到进位为0,返回进位的值。
    public int Add(int num1,int num2) {
           int sum = num1 ^ num2;
           int carry = (num1 & num2) << 1;
           if(carry == 0){
                return sum;
           }else{
                return Add(sum,carry);
           }
        }

剑指offer:不用加减乘除做加法

原文:https://www.cnblogs.com/le-le/p/12492081.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!