lintcode 中等题:A + B Problem A + B 问题
2015-10-22 21:05
218 查看
题目:
如果
注意
你不需要从输入流读入数据,只需要根据
挑战
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?
说明
a和b都是
是的
我可以使用位运算符么?
当然可以
解题
上面提示了用位运算,通过不能够用加法,应该也会用到逻辑运算,感觉应该提取a、b的每位数据进行计算,也就是:a1 = a & 1 ,b1 = b & 1 这个就把a、b的最低位提取出来了,同时在进行下一位计算的时候a、b要右移一位,也就是 a = a>> 1 、b = b>> 1,下面问题是中间该怎么搞?参考博客。
a1、b1是a、b的对应位,carry1上一位的进位数,carry2是这一位的进位数,val是a1、b1、carry的和,计算结果有下表:
下面即简单又不简单
val是第i位的数,carry2是要进位的数,下一轮循环将会代替carry1
val应该在第i位,左移i位可以解决问题,val = val << i
sum 用来保存结果,初始值是 0 ,sum和val进行或运算,<只要有一个1 就是1>,在进行地位运算的时候,高位都是0,也就是主要判断val的值是不是1的问题,sum = sum | val
这里的过程还真的不好想的
下一轮循环就是 a = a >> 1 b = b >> 1
Java程序:
View Code
都是这个数据的问题
中等 A + B 问题
给出两个整数a和b, 求他们的和, 但不能使用+等数学运算符。
如果
a=1并且
b=2,返回
3
注意
你不需要从输入流读入数据,只需要根据
aplusb的两个参数a和b,计算他们的和并返回就行。
挑战
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?
说明
a和b都是
32位整数么?
是的
我可以使用位运算符么?
当然可以
解题
上面提示了用位运算,通过不能够用加法,应该也会用到逻辑运算,感觉应该提取a、b的每位数据进行计算,也就是:a1 = a & 1 ,b1 = b & 1 这个就把a、b的最低位提取出来了,同时在进行下一位计算的时候a、b要右移一位,也就是 a = a>> 1 、b = b>> 1,下面问题是中间该怎么搞?参考博客。
a1、b1是a、b的对应位,carry1上一位的进位数,carry2是这一位的进位数,val是a1、b1、carry的和,计算结果有下表:
a1 | b1 | carry1 | carry1 | val |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 |
1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
val是第i位的数,carry2是要进位的数,下一轮循环将会代替carry1
val应该在第i位,左移i位可以解决问题,val = val << i
sum 用来保存结果,初始值是 0 ,sum和val进行或运算,<只要有一个1 就是1>,在进行地位运算的时候,高位都是0,也就是主要判断val的值是不是1的问题,sum = sum | val
这里的过程还真的不好想的
下一轮循环就是 a = a >> 1 b = b >> 1
Java程序:
class Solution: """ @param a: The first integer @param b: The second integer @return: The sum of a and b """ def aplusb(self, a, b): # write your code here, try to do it without arithmetic operators. if b == 0: return a if a == 0: return b while b!=0: carry = (a&b)<<1 a = a ^ b b = carry return a
View Code
都是这个数据的问题
相关文章推荐
- java前台动态追加form 中input数据 后台遍历request中的所有表单数据
- Java Collection集合接口
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第六题:奇怪的分式(11')
- 大数据环境部署6:Spark环境部署
- 一个程序看fputc和fgetc
- 对于JPA实现的hibernate实体的下划线无法转换问题
- 介绍turtlebot的一个运行在Windows下的带GUI的APP
- linux date精简用法
- C指针
- NYOJ 409 郁闷的C小加(三)
- 大数据环境部署5:Hive安装部署
- iOS入门学习(json解析)
- CAN采样点设置为多少合适?设置不对会咋样?
- android开发中EditText自动获取焦点时隐藏hint的代码
- Java Properties类
- CentOS6.5升级Python到2.7并安装pip
- 树莓派触摸屏连接方法(微雪7寸LCD)
- NYOJ 267 郁闷的C小加(二)
- NYOJ 257 郁闷的C小加(一)
- 天声人語 20151022 廃炉の担い手と安全