不用加减乘除做加法

简介: 不用加减乘除做加法

题目描述

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


分析

对于加法的一个二进制运算。如果不进位那么就是非常容易的。这时候相同位都为 0 则为 001 则为 1 。满足这种运算的异或(不相同取 1 ,相同取 0 )和或(有一个 1 则为 1 )都能满足。

不进位.png


但事实肯定有进位的运算啊!看到上面操作的不足之后,我们肯定还需要解决进位的问题对于进位的两数相加,这种核心思想为:

  1. 用两个数,一个正常m相加(不考虑进位的)。用异或a^b就是满足这种要求,先不考虑进位(如果没进位那么就是最终结果)。另一个专门考虑进位的n。两个1需要进位。所以我们用a&b与记录需要进位的。但是还有个问题,进位的要往上面进位,所以就变成这个需要进位的数左移一位。
  2. 然后就变成m+n重新迭代开始上面直到不需要进位的(即n=0时候)。

进位.png


最终代码实现为:( Java 版)

public class Solution {
  public int Add(int num1,int num2) {
    /*
      *  5+3   5^3(0110)   5&3(0001) 
      *  0101    
      *  0011 
      */
    int a = num1 ^ num2;
    int b = num1 & num2;
    b = b << 1;
    if(b==0) return a;
    else {
        return Add(a, b);
    }        
  }
}


目录
相关文章
|
JSON 算法 API
京东以图搜图功能API接口调用算法源码python
京东图搜接口是一款强大工具,通过上传图片即可搜索京东平台上的商品。适合电商平台、比价应用及需商品识别服务的场景。使用前需了解接口功能并注册开发者账号获取Key和Secret;准备好图片的Base64编码和AppKey;生成安全签名后,利用HTTP客户端发送POST请求至接口URL;最后解析JSON响应数据以获取商品信息。
|
机器学习/深度学习 TensorFlow 算法框架/工具
seq2seq:中英文翻译
seq2seq:中英文翻译
146 1
|
Java Python Spring
spring boot读取resources目录下的python脚本执行
spring boot读取resources目录下的python脚本执行
1700 0
spring boot读取resources目录下的python脚本执行
|
Java 关系型数据库 MySQL
【Linux】jdk、tomcat、MySQL环境搭建的配置安装,Linux更改后端端口
【Linux】jdk、tomcat、MySQL环境搭建的配置安装,Linux更改后端端口
250 0
|
存储 监控 机器人
JavaRobot如何实现屏幕截图
屏幕截图是日常开发中常见且重要的功能之一,而JavaRobot提供了一种简便且高效的方式来实现屏幕截图。本文将介绍JavaRobot如何实现屏幕截图的步骤和方法。
393 0
|
存储 缓存 算法
倒排索引:ES倒排索引底层原理及FST算法的实现过程(二)
倒排索引:ES倒排索引底层原理及FST算法的实现过程(二)
倒排索引:ES倒排索引底层原理及FST算法的实现过程(二)
|
Web App开发 安全
含泪推荐5款极为实用的软件
今天的主题是简洁,轻便,都是轻量级的小软件,界面都是非常简洁,而且无广告的。
201 2
含泪推荐5款极为实用的软件
|
算法 BI
m分别通过GA遗传优化算法对企业不同产品订单生产进行时间优化
m分别通过GA遗传优化算法对企业不同产品订单生产进行时间优化
197 0
m分别通过GA遗传优化算法对企业不同产品订单生产进行时间优化
|
数据采集 前端开发 JavaScript
|
测试技术 编译器 Python
性能专题:Locust工具实战之创建性能测试
性能专题:Locust工具实战之创建性能测试
284 0
性能专题:Locust工具实战之创建性能测试