博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode371: Sum of 2 Integers
阅读量:7039 次
发布时间:2019-06-28

本文共 844 字,大约阅读时间需要 2 分钟。

题目描述:

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:

Given a = 1 and b = 2, return 3.

网上流传最广的方法:

原理:使用异或操作可以进行二进制不带进位的加减,与操作可以得到进位。

即:

result0 = a ^ b

carry0 = (a & b) << 1

于是有:a + b = result0 + carry0

再进行一次迭代:

result1 = result0 ^ carry0

carry1 = (result0 & carry0) << 1

以此类推:有a + b = result0 + carry0 = result1 + carry1 = result2 + carry2 = ······ = resultN + carryN = result(N+1) ,直到carry(N+1)=0得到结果。

所以步骤是:

1、先让两个数字相加,但是不进位,即做异或的操作;
2、计算产生的进位,让两个数字位与操作,然后向左移动一位;
3、前两步的结果相加,重复前两个步骤直到进位为0;

很容易写出代码:

public class SumOf2Int {	static int getSum(int a, int b) {		int x, y;		while (b != 0){			x = a ^ b;			y = (a & b) << 1;			a = x; b = y;		}		return a;	}	public static void main(String[] args) {		System.out.println(getSum(-15, -5));	}}

转载于:https://www.cnblogs.com/kelasike/p/5701983.html

你可能感兴趣的文章
面向对象+模块化设计绘制canvas星空动画
查看>>
Elastic Search学习笔记3——集群配置
查看>>
Unity客户端资源智能管理
查看>>
SVN在Windows下的安装配置步骤
查看>>
网页两侧悬浮广告js代码
查看>>
算法练习:判断一个字符串中的字符是否唯一(只用基本数据结构)
查看>>
淘宝技术的科普贴图文
查看>>
http://itunes.apple.com/lookup?id=获取不到版本
查看>>
理解Javascript的状态容器Redux
查看>>
制作liveusb实现ubuntserver12全自动无人职守安装
查看>>
centos7的fstab要小心
查看>>
Windows phone8 基础篇(三)常用控件(二)
查看>>
架构师速成4.8-幼儿园书单资料推荐
查看>>
MySQL-Proxy实现读写分离部署文档
查看>>
For Update
查看>>
Hyper-V 之03 创建iSCSI存储和故障转移群集
查看>>
如何成为一名架构师?
查看>>
我的友情链接
查看>>
nfs failed, reason given by server: Permission denied的离奇解决
查看>>
2018 1.21测试
查看>>