美文网首页
面试题65(剑指offer)--不用加减乘除做加法

面试题65(剑指offer)--不用加减乘除做加法

作者: Tiramisu_b630 | 来源:发表于2019-08-15 11:02 被阅读0次

    题目:

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

    思路:

    • 题目要求不能使用加减乘除,想到使用位运算来代替

    • 加法计算一般分三步:1.各位相加不进位 2.计算进位 3.两者相加

    • 比如 7+9先相加是6,进位是10,然后10+6=16

    • 二进制下为00000111+00001001先相加00001110,进位00000010,然后0001110+0000010还有进位,重复前两步,直至00010000+00000000=00010000=16为止

    • 二进制下运算的第一步相当于异或运算(解释见表),第二步相当于&运算然后左移1位,第三步是重复前两步直至没有进位,异或的结果即为两数之和

      加法 异或
      0和0 0 0
      0和1 1 1
      1和0 1 1
      1和1 0 0

      代码:

        public static int add(int num1,int num2) {
              int andNum=num1&num2;
              int xorNum=num1^num2;
              while (andNum!=0){
                  num1=andNum<<1;
                  num2=xorNum;
                  andNum=num1&num2;
                  xorNum=num1^num2;
              }
              return xorNum;
          }
      

    相关文章

      网友评论

          本文标题:面试题65(剑指offer)--不用加减乘除做加法

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