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

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

    题解:使用位运算

    • 计算不进位的和 sum = a ^ b;
    • 计算进位carry = a & b << 1;
    • 重复上两步a = sum; b = carry;
    class Solution {
    public:
        int add(int a, int b) {
            int sum;
            while (b != 0) {
                sum = a ^ b;
                b = ((unsigned int)(a & b) << 1);
                a = sum;
            }
            return a;
        }
    };

    注意:C++不支持负值左移,要用unsign int

    相关问题:

    不使用新的变量,交换两个变量的值

    // 基于加减法
    a = a + b;
    b = a - b;
    a = a - b;
    
    // 基于异或运算
    a = a ^ b;
    b = a ^ b;
    a = a ^ b; 
  • 相关阅读:
    BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊 ——Link-Cut Tree
    BZOJ 2049 [Sdoi2008]Cave 洞穴勘测 ——Link-Cut Tree
    hdu
    hdu
    hdu
    hdu
    hdu
    hdu
    hdu
    hdu
  • 原文地址:https://www.cnblogs.com/betaa/p/12668300.html
Copyright © 2011-2022 走看看