lintcode -- A+B问题
来源:互联网 发布:权力的游戏收视率数据 编辑:程序博客网 时间:2024/05/17 07:37
给出两个整数a和b, 求他们的和, 但不能使用 +
等数学运算符。
注意事项
你不需要从输入流读入数据,只需要根据aplusb
的两个参数a和b,计算他们的和并返回就行。
说明
a和b都是 32位
整数么?
- 是的
我可以使用位运算符么?
- 当然可以
/*
位运算实现整数加法本质就是用二进制进行运算。
其主要用了两个基本表达式:
x^y //执行加法,不考虑进位。
(x&y)<<1 //进位操作
令x=x^y ;y=(x&y)<<1 进行迭代,每迭代一次进位操作右面就多一位0,
最多需要“加数二进制位长度”次迭代就没有进位了,此时x^y的值就是结果。
我们来做个3位数的加法:
101+011=1000 //正常加法
位运算加法:
(1) 101 ^ 011 = 110
(101 & 011)<<1 = 010
(2) 110 ^ 010 = 100
(110 & 010)<<1 = 100
(3) 100 ^ 100 = 000
(100 & 100)<<1 = 1000
此时进行相加操作就没有进位了,即000 ^ 1000=1000即是最后结果。
*/
class Solution {
public int aplusb(int a, int b) {
while(b != 0){
int carry = a & b;
a = a ^ b;
b = carry << 1;
}
return a;
}
}
位运算实现整数加法本质就是用二进制进行运算。
其主要用了两个基本表达式:
x^y //执行加法,不考虑进位。
(x&y)<<1 //进位操作
令x=x^y ;y=(x&y)<<1 进行迭代,每迭代一次进位操作右面就多一位0,
最多需要“加数二进制位长度”次迭代就没有进位了,此时x^y的值就是结果。
我们来做个3位数的加法:
101+011=1000 //正常加法
位运算加法:
(1) 101 ^ 011 = 110
(101 & 011)<<1 = 010
(2) 110 ^ 010 = 100
(110 & 010)<<1 = 100
(3) 100 ^ 100 = 000
(100 & 100)<<1 = 1000
此时进行相加操作就没有进位了,即000 ^ 1000=1000即是最后结果。
*/
class Solution {
public int aplusb(int a, int b) {
while(b != 0){
int carry = a & b;
a = a ^ b;
b = carry << 1;
}
return a;
}
}
阅读全文
0 0
- LintCode-A + B 问题
- Lintcode A+B问题
- LintCode-A + B 问题
- LintCode A+b问题
- LintCode-A + B 问题
- lintcode -- A+B问题
- Lintcode:A + B 问题
- LintCode之A+B问题
- Lintcode 1 A + B 问题
- LintCode | 1. A + B 问题
- 【LintCode】1、A + B问题
- LintCode 1.A + B 问题
- [Lintcode] #1 A + B 问题
- LintCode-(1)A + B 问题
- LintCode-剑指Offer-(1)A+B问题
- lintcode刷题 A + B 问题 位运算
- LintCode-第1题 A+B问题
- 【lintcode】1、A+B问题【位运算】
- c++11:static_assert 与assert
- Cyclone IV 外接ddr2(一)
- jmeter 之SSL篇
- 21. Merge Two Sorted Lists(Java)
- ACM总结
- lintcode -- A+B问题
- 毁灭
- 求一个无序数组的中位数
- 高并发的核心技术-幂等的实现方案
- 常数和语言基础
- C语言数据结构-顺序队列-数组实现
- break、continue和return的区别
- 算法(入门)-选择排序
- 枚举类的简单说明