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

    题目描述

    写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
     
    思路:感觉还是对位运算不太熟悉。
    ^异或是不进位加法,相同的为0,不同的为1;
    &与运算是都为1就为1,有一个是0就全为0;
    |或运算只要有一个是1就是1.
    例子:5 + 7;
    这题首先1)计算不进位的加法,5 + 7 = 02;
        2)计算进位。5 +7 = 10;
        3)将1和2相加,10 + 2 = 12;
    第一步就是异或操作,第二步首先使用&操作得到都为1的那些位,然后一定记得左移一位才是得到进位,因为10 & 10 = 10,但是应该要进位,所以<<1。
    还有就是为什么需要一个循环,因为第一步和第二步相加,也可能进位,所以循环的终止条件是进位为0的时候才终止。
    相关问题:
    如何不使用中间变量,交换两个变量的值。
    基于加减法:
    a = a + b;
    b = a - b;
    b = a - b;
    基于异或运算:
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    对于异或的理解:
    a = a ^ b;
    然后第二个将上面的a带入第二,
    b = a ^ b ^ b;
     
     
    class Solution {
    public:
        int Add(int num1, int num2){
            int p1 = 0,p2 = 0;
            
            while(num2 != 0){
                p1 = num1 ^ num2;
                p2 = (num1 & num2) << 1;            
               
                num1 = p1;
                num2 = p2;
            }        
            return num1;
        }
    };
     
     
  • 相关阅读:
    git 管理
    SVN 管理
    为什么要做静态库
    Sqlite3
    CocoaPod
    内存管理
    readline的用法
    join合并字符串时使用生成器表达式
    pandas DataFrame数据转为list
    Jenkins自动化CI CD流水线之4--Master-Slave架构
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8274987.html
Copyright © 2011-2022 走看看