不用加减乘除做加法

题目描述

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

 思路:两个数的和为Si = Xi 异或 Yi 异或 Ci(Ci为进位),异或我们可以用^来计算,如果计算进位,以及计算完进位之后如何再继续计算是我遇到的问题。

1.求两个数的异或值

2.两个数相与,再左移一位就是进位

3.如果进位为0,那么计算得到的异或值即为最终结果,否则说明仍然有进位,需要继续1 2 步骤

class Solution {
public:
    int Add(int num1, int num2)
    {
        int numyu = -1;
        int numyh = -1;
        while(num2){
            numyh = num1 ^ num2;
            numyu = (num1 & num2) << 1;  //进位
            num1 = numyh;
            num2 = numyu;
        }
        return num1;
    }
};
原文地址:https://www.cnblogs.com/ttzz/p/13856148.html