不用加减乘除做加法

youzhihua · · 623 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

题目描述

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

思路

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
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:youzhihua

查看原文:不用加减乘除做加法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

623 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传