lintCode(408)——二进制求和
2016-04-07 15:54
309 查看
题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。
样例
a = 11
b = 1
返回 100
难度级别:容易
思路分析:
此题思路较为简单,认真判断进位就可以了。
需要注意的是,需要仔细判断是否存在最后一次进位,即进位的值是否都加起来了。读两个输入的字符串,是从最低位(即字符串尾)开始进行加法和进位计算的,得到的结果字符串是从字符串头部开始连接的,所以最后返回的时候,要反转字符串,这样才是正确的顺序。
实现代码如下:
样例
a = 11
b = 1
返回 100
难度级别:容易
思路分析:
此题思路较为简单,认真判断进位就可以了。
需要注意的是,需要仔细判断是否存在最后一次进位,即进位的值是否都加起来了。读两个输入的字符串,是从最低位(即字符串尾)开始进行加法和进位计算的,得到的结果字符串是从字符串头部开始连接的,所以最后返回的时候,要反转字符串,这样才是正确的顺序。
实现代码如下:
class Solution { public: /** * @param a a number * @param b a number * @return the result */ string addBinary(string& a, string& b) { // Write your code here int i=a.size()-1; int j=b.size()-1; string res=""; int c=0; int sum=0; for(;i>=0&&j>=0;i--,j--) { sum=(a[i]-'0')+(b[j]-'0')+c; c=sum/2; sum=sum%2; res+=(sum+'0'); } for(;i>=0;i--) { sum=(a[i]-'0')+c; c=sum/2; sum=sum%2; res+=(sum+'0'); } for(;j>=0;j--) { sum=(b[j]-'0')+c; c=sum/2; sum=sum%2; res+=(sum+'0'); } if(c!=0) { res+=('0'+c); } i=0; j=res.size()-1; while(i<j) { int temp=res[i]; res[i]=res[j]; res[j]=temp; i++; j--; } return res; } };
相关文章推荐
- org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException:
- 7.4 deliver_mailbox_file函数:以mbox格式接收邮件
- 工具类StringUtil
- UITableViewCell高度自适应探索--AutoLayout结合Frame
- 在整体的DbContext上针对所有的通用列进行赋值
- 最近遇到的比较重要的,面试可能会用到的知识
- 折腾,,,再折腾
- SVN Cornerstone 报错信息 xcodeproj cannot be opened because the project file cannot be parsed.
- nginx.conf的配置
- 集结Android开发里的各种大神
- Dubbo自我理解
- HTML5 浏览器支持(怎么样让低版本浏览器支持html5?)
- 通过路由管理视图间切换 - AngularJS路由解析
- 状态通知栏
- 分布式事务处理
- STL学习笔记— —容器list
- 1012. 数字分类 (20)——做题纪录
- 【地图投影】墨卡托投影(一)
- Linux ac --在线时间统计
- 我的C++第三次实验报告