LintCode刷题笔记-- A+B problem

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode刷题笔记-- A+B problem相关的知识,希望对你有一定的参考价值。

位运算

描述

Write a function that add two numbers A and B. You should not use + or any arithmetic operators.

解题思路:

利用位运算来解决A+B的问题,可以将此问题转化为解决不进位相加和进位(carry bit)的两部分问题:

1. 首先是不进位相加:_A = A^B 先对A和B进行异或运算(XOR manupitation) , A 和B 中两位不相同的变为1,相同的变为 0, 同为1是不进位

2. 其次是进位  _B =(A&B)<<1

所以 A+B = A^B + (A&B)<<1

3.在循环中(A&B)<<1 的目的是将要进位的1一直向左移动,之后与新生成的_A进行异或运算,来进行进位运算的模拟(这一步就是进位)

4. 直到将所有的1全部向左移位为0

参考代码:

技术分享

 

以上是关于LintCode刷题笔记-- A+B problem的主要内容,如果未能解决你的问题,请参考以下文章

LintCode刷题笔记-- LongestCommonSquence

LeetCode刷题笔记 - 12. 整数转罗马数字

LintCode刷题笔记-- CoinsInLine

LintCode刷题笔记-- BackpackIV

LintCode 刷题记录

LintCode刷题笔记-- BackpackII