zoukankan      html  css  js  c++  java
  • 剑指Offer——不用加减乘除做加法

    题目描述:

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


    分析:

     "^"是不带进位的加法。

     "&"可以得到所有进位位组成的数。

    我们只需要将不进位加后的数与所有进位位组成的数右移一位的结果相加就可以得到和。

    不过我们在上面一步的加法过程中,我们也只能用"^"不进位的加法。

    所以我们要循环之前的步骤直到不出现进位的情况,这样我们的"^"就和普通加法一样了。


    代码:

     1 class Solution {
     2 public:
     3     int Add(int num1, int num2) {
     4         int a = num1 ^ num2;    // 不进位加
     5         int b = (num1 & num2) << 1; // 要进位位组成的数右移一位
     6         while(b) {  // 不进位加后的数与要进位位组成的数右移一位的结果相加
     7             int c = a ^ b;
     8             b = (a & b) << 1;
     9             a = c;
    10         }
    11         return a;
    12     }
    13 };
  • 相关阅读:
    Add Two Numbers
    Same Tree
    Single Number
    题目1190:大整数排序
    题目1182:统计单词
    题目1181:遍历链表
    题目1180:对称矩阵
    题目1179:阶乘
    题目1206:字符串连接
    HTML事件
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747756.html
Copyright © 2011-2022 走看看