剑指 Offer 65. 不用加减乘除做加法

剑指 Offer 65. 不用加减乘除做加法

题目

20201118121828-2020-11-18-12-18-29

题意

就是不让用加减乘除等运算来模拟实现加法运算。

题解

  • 异或找到不需要进位的情况。

  • 相与找到需要进位的情况。然后左移一位模拟进位。

  • 不停循环直到进位的值为零时,即两数异或就是两个数的和的情况。
    20201118122940-2020-11-18-12-29-40

    show your code

    class Solution {
    public:
      int add(int a, int b) {
    
          int n, m;
          while (b != 0) {
              //这是无进位的情况。
              n = a ^ b;
              //进位的。
              m = (unsigned int)(a & b) << 1; // 转换成无符号数。可能有负数的情况。
              a = n;
              b = m;  // 一直到进位的情况为 0,退出循环。
          }
          return a;
      }
    };

喜欢的话,给博主赏一杯冰阔乐吧


 上一篇
剑指 Offer 38. 字符串的排列 剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列题目原题传送门 题解解题思路dfs 正常搜索就行了。排序的话例如。用数字模拟代表字符。排序后结果为。1 2 2 2 3当我没有选择 第一 2 数字时,第二 次出现 2 我也不能进行选择。不然的话。情况一
2020-11-19
下一篇 
leetcode 868. 二进制间距 leetcode 868. 二进制间距
题目运行效率 题解lowbit(x) 是x二进制表达式中最低位1所代表的数值。即x & -x就是lowbit函数。例如当x=22时二进制表示10110则 22&-22既可以得到二进制数值10。为啥呢?因为我们计算机中负数采用
2020-11-12
  目录