1 A+B问题
原题网址: http://www.lintcode.com/zh-cn/problem/a-b-problem/#
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
注意事项
你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。
a和b都是 32位 整数么?
- 是的
我可以使用位运算符么?
- 当然可以
如果 a=1 并且 b=2,返回3
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?
仍然分3步:
1. 忽略进位,对应各位数字相加,得到10100;
2. 记录进位,本例中只有最后一位相加时产生进位1,进位值为10(二进制);
3. 按照第1步中的方法将进位值与第1步结果相加,得到最终结果10110,正好是十进制数22的二进制表示。
第1步(忽略进位):0+0=0,0+1=1,1+0=0,1+1=0,典型的异或运算。
第2步:很明显,只有1+1会向前产生进位1,相对于这一数位的进位值为10,而10=(1&1)<<1。
第3步:将第1步和第2步得到的结果相加,其实又是在重复这2步,直到不再产生进位为止。
int aplusb2(int a, int b)
{
if (a==)
{
return b;
}
if (b==)
{
return a;
}
int x=a^b;
int y=(a&b)<<;
return aplusb2(x,y);
}
class Solution {
public:
/**
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
*/
int aplusb(int a, int b) {
// write your code here
while(b!=)
{
int x=a^b;
int y=(a&b)<<;
a=x;
b=y;
}
return a;
}
};
随机推荐
- mysql命令行执行时不输出列名(字段名),直接显示字段对应的数值
执行命令时加个-N参数就可以了 -N, –skip-column-names 比如说:mysql -uroot -p1234546 -N -e “select * from user;”
- ACM-ICPC 训练平台 & 比赛 分析
the file can download in https://pan.baidu.com/s/1HwoLFHGAG-boQbIn9xIhxA occ5 the article is also pu ...
- leetcode-两个数组的交集
C++解题方法: class Solution { public: vector<int> intersection(vector<int>& nums1, vecto ...
- leetcode-159周赛-5233-规划兼职工作*
方法: class Solution: def jobScheduling(self, startTime: List[int], endTime: List[int], profit: List[i ...
- javascript--判断语句
1.if...else.. if(m===1){ console.log('1') }else{ console.log('X') } 一般if 里面采用类型全等的运算符. 2.switch var ...
- 38 ubuntu/windows双系统安装
0 引言 (1)针对bios 和 uefi引导,安装方式略有不同. (2)针对nvidia显卡,在安装时需要特殊设置. 1 EasyBCD安装方式介绍-适用于bios引导方式 参考百度经验贴安装即可, ...
- 图片转换为base64
明天中秋了,先祝大家中秋快乐!哈哈,最近见有人在群里问怎么把图片转换成base64格式,之前刚好写过就把代码贴出来. 主要用到canvas中的toDataURL方法 <!DOCTYPE html ...
- cdq分治·三维偏序问题
转载自FlashHu大佬的博客CDQ分治总结(CDQ,树状数组,归并排序),在讲述部分有部分删改,用了自己的代码 CDQ分治的思想 CDQ分治是基于时间的离线分治算法.这一类分治有一个重要的思想——用 ...
- 创建用户的方法 3种mysql创建方法
mysql创建用户的方法分成三种:INSERT USER表的方法.CREATE USER的方法.GRANT的方法. 一.账号名称的构成方式 账号的组成方式:用户名+主机(所以可以出现重复的用户 ...
- JsJquery小技巧
JS对URL编码 :encodeURI() .Net对URL解码:HttpUtility.UrlDecode() 格式化输出百分数 function formatePercent(data){ ...