LintCode(容易)二进制求和
2016-07-20 14:28
309 查看
class Solution { public: /** * @param a a number * @param b a number * @return the result */ string addBinary(string& a, string& b) { string lg, st; lg = (a.size() > b.size()) ? a : b; st = (lg == a) ? b : a; string answer("0"); answer = answer + lg; string::size_type i = st.size() - 1; string::size_type m = lg.size() - 1; string::size_type w = m-i; int jinwei = 0; //计算短字符串的st.size()位,即如(10111,10,cout<<answer[m+1],输出为1、0(倒着输出); for (;i!=-1; i--,m--){ answer[m + 1] = ((jinwei + st[i] - '0' + lg[m] - '0') % 2 + '0'); //cout << st[i] << endl; jinwei = (st[i] - '0' + lg[m] - '0' + jinwei) / 2; } //计算多出的部位 for (; w != -1; w--){ int p = answer[w] - '0'; answer[w ] = (p + jinwei) % 2 + '0'; jinwei = (p + jinwei) / 2; } if (answer[0]-'0' == 0){ answer = answer.substr(1, lg.size());// cout << answer << endl; } return answer; } };
VC版见project:二进制求和。
总结:
1.string里面的是字符,输出的时候可以正确输出数值,但是当利用其中字符型数字计算时,用到的将是它的ascii码,要想得到string中char型数字,让它-‘0’即可。
2.unsigned值永远大于0,它的-1其实是一个很大的数。
3.c++中想要比较两个字符串里面的值是否相等,只要用==就可以了,不用担心两者因地址不同而产生差错
4.单引号内只能有一个字符,比如‘!’,像’!!!’是错误的,正确的应该是“!!!”。
10月份回顾再次总结:
1.此题的考点:int与string之间的转换
string到int
string s = "123"; int n; n = atoi(s.c_str()); cout << n << endl;
另附
int到string
int k=123; string s=to_string(k);//成功 string s1=to_string(123);//成功
2.求string的大小,既可用s.size(),也可以用s.length()
3.字符的加法减法得出的是acsii码
4.
string a = "123"; if (a[1] == '1')cout << '!'; //输出! if (a[1] == 50)cout << '!'; //输出!
5、0的ascii码是48,9是57,a是97,A是65,空格是32
相关文章推荐
- destoon 上传多张照片,出现后面的图片上传不了解决办法
- jmap,jhat分析内存
- WordPress工作原理之程序文件执行顺序
- tomcat get 中文乱码
- HDU5726 GCD
- MSReportBuilder 开发学习二
- redis的pconnect解析
- MiniDao_1.6-SNAPSHOT 版本发布,轻量级Java持久化框架
- GroupId和ArtifactId
- 互联网分享知识(一转载 http://www.cnblogs.com/baochuan/p/4636103.html)
- php+ajax注册实时验证功能
- codeforces-57C Array(找规律+逆元)
- mac下 iterm2配色方案
- Cpp环境【Usaco2.1.3】【Vijos1222】顺序排分数
- Search a 2D Matrix II
- Java Calendar 类的时间操作
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
- Oracle 找出需要回收高水位的表
- LeetCode 67. Add Binary
- Centos6.X下安装Eclipse