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

    题目描述

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

    解题思路

    我们可以利用位运算,两个数相加先不考虑进位,得到结果,如5+17,101+10001,在不考虑进位时,得到的是10100,也即两个数异或。然后再对得到的数加上进位数。进位数只有在两个数均为1的情况下发生进位(相与为1),相与之后得到的结果是当前不为0的为的下一个位需要加上进位数,因此对相与结果左移一位。然后对两个结果相加,此时操作和上面的操作一致,直至没有进位。

    实现

    public class Solution {
        public int Add(int num1,int num2) {
            int adder, result;
            do{
                adder = (num1 & num2) << 1;
                result = num1 ^ num2;
    
                num1 = result;
                num2 = adder;
    
            }while (adder != 0);
            return result;
        }
    }
    
  • 相关阅读:
    Root of AVL Tree
    04-树4 是否同一棵二叉搜索树
    03-树3 Tree Traversals Again
    03-树2 List Leaves
    283. Move Zeroes
    506. Relative Ranks
    492. Construct the Rectangle
    476. Number Complement
    461. Hamming Distance
    389. Find the Difference
  • 原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5809193.html
Copyright © 2011-2022 走看看