(LeetCode初探)从A+B开始
来源:互联网 发布:网络安全技术高峰论坛 编辑:程序博客网 时间:2024/06/05 18:16
第一次接触LeetCode,自然是从水题开始做起,首先解决的是一道A+B问题,大概问题就是不借助加法运算符实现加法运算,提示使用位运算完成。
问题如下:
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
样例
如果 a=1 并且 b=2,返回 3
注意
你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。
解题思路:
根据提示,本题需要借助位运算模拟加法运算。首先想到的是异或运算,按位异或可以模拟一种不进位的加法运算,如二进制的11^10=01,每一位异或都相对于每一位的加法,但是缺乏进位。如何解决进位的问题呢?
由于异或运算仅仅是忽略了进位,那么每次有进位发生时,异或运算相当于忽略了高位的一个1。使用按位与“&”运算可以帮助我们判断该位是否有进位。如11&11 =11,说明两位在加运算中都产生了进位1。由于该进位是加在高位上的,所以很自然的想到了把与运算的结果往左移一位,再和异或结果相加,即为最后结果。
代码如下:
class Solution {public: /* * @param a: The first integer * @param b: The second integer * @return: The sum of a and b */ int aplusb(int a, int b) { if (b == 0) return a; else return aplusb(a^b, (a&b) << 1); }};
在搜索解答时,还找到了这样一段代码,暂时不是很理解。
链接:http://blog.csdn.net/zhangtonghui816/article/details/8526711
#include <iostream>using namespace std;char* add(int a,int b){ char *c; c = (char *) a; return &c[b];}void main(){ int result; result=(int)add(20000,300); cout<<result; getchar();}
同样的,这也是我第一次写博客记录自己的学习过程,希望自己能坚持下去,走好以后的每一步。
0 0
- (LeetCode初探)从A+B开始
- 从a+b开始
- HPU1389--梦想从A+B开始(输出,注意特殊符号的输出)
- acm从基本开始--熟悉输入输出HDU1000 A+B
- Redux 从源码开始学习(一):初探redux
- Spark源码初探-从spark-submit开始
- 从A点开始到B点通过最短的路一共有多少条
- hpuoj【1389】梦想从A+B开始【水题】&&【转义字符的输出】
- origin教程(1)——初探、从一个6*1.5w+的大数据开始
- 九度oj1004 A+B 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开
- 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
- iOS App转让(从A转让给B)
- 从0开始一个React/ES6项目-Webpack初探
- 从链表A中删除从i开始的len个元素,同时粘贴到B链表的第j元素之前
- 从今天开始刷leetcode了
- 从今天开始,正式的刷leetcode!
- 从某标签A内的B标签,即从A标签中选择B标签($("#B")是获取整个页面中的B标签),即获取A标签的子标签B,怎么获取?
- 统计整数区间[a,b](a、b从键盘输入)中素数的个数,并输出这些素数。
- 创建xml并写入,读取xml内容
- 在Android里用Pull方式解析XML文件
- 巴贝奇、阿达和他们的差分机
- zookeeper应用场景!
- 第六篇 毕业感悟
- (LeetCode初探)从A+B开始
- Ubuntu上配置静态ip
- Java面试题32问
- iOS日期处理
- toj 2190 Nuanran's Idol
- 通过ip地址连接virtualbox虚拟机android-x86
- 企业发展的十大专利战略
- CodeBlocks 的使用方法(不定期更新)
- jvm hotspot 虚拟机源代码编译