码迷,mamicode.com
首页 > 其他好文 > 详细

【Add binary】cpp

时间:2015-05-06 10:53:29      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

题目:

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

代码:

class Solution {
public:
    string addBinary(string a, string b) {
            std::string result;
            std::string::reverse_iterator ia = a.rbegin();
            std::string::reverse_iterator ib = b.rbegin();
            int carry = 0;
            for ( int sum=0, part_a=0, part_b=0; ia!=a.rend() || ib!=b.rend(); ia==a.rend()? a.rend() : ++ia, ib==b.rend()? b.rend() : ++ib )
            {
                part_a = ia==a.rend() ? 0 : *ia-0;
                part_b = ib==b.rend() ? 0 : *ib-0;
                sum = part_a + part_b + carry;
                result.insert(result.begin(), sum%2+0);
                carry = sum/2;
            }
            if ( carry==1 ) result.insert(result.begin(), 1);
            return result;
    }
};

tips:

1. 熟悉string的一些方法:rbegin rend insert

2. 熟悉int与其对应的char的转换方法。

顺道复习了一下c++ primer plus上类型转换的章节:

1. 赋值时进行转换: 变量类型不一样,可能产生潜在的丢失或者失去精度。

2. 表达式中的转换

3. 传参时类型转换

4. 强制类型转换

另外,

part_a = ia==a.rend() ? 0 : *ia-‘0‘; (int)

result.insert(result.begin(), sum%2+‘0‘); (char)

同样是int与char之间的加减运算,为什么返回的类型不一样呢?

猜测应该是这样的:运算时都转化成ASCII码的值进行加减;最后如果要求是int的就保持int型,需要是char的就转换成char型。

c++ primer plus (第四版) 45~47讲解了这种转换。

‘0‘可以理解为字符常量,在内存中就是按照整型存的。

又试验了一下

char c = 65+1;

int i = 65+1;

cout << c << endl;

cout << i << endl;

输出结果是:

B

66

通过这个例子就可以记住char的一些性质了

另外,通过这个例子,复习了单双引号的不同:c++中char常量用单引号括起;双引号表示字符串,二者差别还是很大的。

PS:之前还傻搜字符跟整形转换... c++中将char在内存中存成了整型,正是因此带来了极大的便利,可以很轻松的通过加减来灵活处理字符。

那么,如果是中文或者日文这种不止256个字符的语系呢?可以有wchar_t类型(本质就用来编码的bits比8位多了)

wchar_t a = L‘A‘ (前缀L表示宽字符常量)

 

【Add binary】cpp

标签:

原文地址:http://www.cnblogs.com/xbf9xbf/p/4481085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!