LintCode(容易)二进制求和

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值