您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: