不用加减乘除做加法

作者: youzhihua | 来源:发表于2020-03-05 16:15 被阅读0次

    题目描述

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

    思路

    1.此问题可以使用位运算求解。
    2.两个数字异或(^)的话,可以得到两数相加不进位的结果;两个数字相与(&)的并左移一位,可以得到需要进位的位数。

    例如:5+7 = 1100,第一位和第三位有进位(1010),不进位结果为(2)

    • 101 ^ 111 = 0010
    • 101 & 111 = 1010
    1. 可以写个循环,将异或结果与进位情况一直相与(&),若不为0,说明还是有进位情况,需要进行操作;若为0,则说明没有进位情况,已经得到了最终结果。

    Java代码实现

    class Solution {
        public int add(int a, int b) {
            while(a != 0){
                int temp = a ^ b;
                a = ((a & b) << 1);
                b = temp;
            }
            return b;
        }
    }
    

    Golang代码实现

    func add(a int, b int) int {
        for a != 0 {
            temp := a ^ b
            a = (a & b) << 1
            b = temp
        }
        return b
    }
    

    相关文章

      网友评论

        本文标题:不用加减乘除做加法

        本文链接:https://www.haomeiwen.com/subject/qdvfrhtx.html