【Add binary】cpp
题目:
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 = ;
for ( int sum=, part_a=, part_b=; ia!=a.rend() || ib!=b.rend(); ia==a.rend()? a.rend() : ++ia, ib==b.rend()? b.rend() : ++ib )
{
part_a = ia==a.rend() ? : *ia-'';
part_b = ib==b.rend() ? : *ib-'';
sum = part_a + part_b + carry;
result.insert(result.begin(), sum%+'');
carry = sum/;
}
if ( carry== ) result.insert(result.begin(), '');
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表示宽字符常量)
========================================
第二次过这道题,复习了一下digit跟char的一些操作运算。
class Solution {
public:
string addBinary(string a, string b) {
const int len_a = a.size();
const int len_b = b.size();
vector<char> ret;
int i_a = len_a-;
int i_b = len_b-;
int carry = ;
while ( i_a>= || i_b>= )
{
int part1 = i_a>= ? a[i_a] : '';
int part2 = i_b>= ? b[i_b] : '';
int tmp_sum = (part1-'') + (part2-'') + carry;
carry = tmp_sum / ;
int curr = tmp_sum % ;
ret.insert(ret.begin(), curr+'');
i_a = i_a>= ? i_a- : i_a;
i_b = i_b>= ? i_b- : i_b;
}
if (carry==) ret.insert(ret.begin(), carry+'');
return string(ret.begin(),ret.end());
}
};
【Add binary】cpp的更多相关文章
- 【Path Sum】cpp
题目: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up ...
- 【Symmetric Tree】cpp
题目: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). F ...
- 【Same Tree】cpp
题目: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...
- hdu 4739【位运算】.cpp
题意: 给出n个地雷所在位置,正好能够组成正方形的地雷就可以拿走..为了简化题目,只考虑平行于横轴的正方形.. 问最多可以拿走多少个正方形.. 思路: 先找出可以组成正方形的地雷组合cnt个.. 然后 ...
- Hdu 4734 【数位DP】.cpp
题意: 我们定义十进制数x的权值为f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+...a(2)*2+a(1)*1,a(i)表示十进制数x中第i位的数字. 题目给出a,b,求出0~ ...
- 【Text Justification】cpp
题目: Given an array of words and a length L, format the text such that each line has exactly L charac ...
- 【Divided Two】cpp
题目: Divide two integers without using multiplication, division and mod operator. If it is overflow, ...
- 【Multiply Strings】cpp
题目: Given two numbers represented as strings, return multiplication of the numbers as a string. Note ...
- 【Minimum Window】cpp
题目: Given a string S and a string T, find the minimum window in S which will contain all the charact ...
随机推荐
- POJ C++程序设计 编程题#3 编程作业—文件操作与模板
编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利 ...
- POJ C++程序设计 编程题#4:魔兽世界之一:备战
编程题#4:魔兽世界之一:备战 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 ...
- SQL服务器更改名称后
SQL服务器更改名称后 编写人:CC阿爸 2014-6-15 在日常SQL 2005数据库的操作中,有时安装完成数据库后,再更名,造成部分SQL服务不能正常使用(在SQL2000 时,想都别想更名了) ...
- echarts 各种细节问题
1.最大值最小值异常 //如果数组中的数字是字符串的形式的话,echarts计算最大最小值不正确,故将String的数字转化成Number类型 //将包含字符串的数组转化为浮点数数组 function ...
- PHP 实现下载文件到本地
只需要在php文件中设置请求头就可以了,创建download.php文件,代码如下: $fileName = $_GET['filename']; //得到文件名 header( "Cont ...
- PHP通过IP 获取 地理位置(实例)
发布:JB02 来源:脚本学堂 分享一例php代码,实现通过IP地址获取访问者的地理位置,在php编程中经常用到,有需要的朋友参考下吧.本节内容:PHP通过IP获取地理位置 例子: 复制代码代码 ...
- htaccess rewrites重写规则实例
1..htaccess rewrite实例开始部分 Options +FollowSymLinksRewriteEngine OnRewriteBase / 2.把不带www的域名地址重定向到带www ...
- APK反编译之一
初步接触APK反编译.刚刚使用android-apktool软件反编译了一下QQ.apk,目的只是想看看QQ这个应用软件是内部是如何设计的,希望可以在某些方面借鉴一下.下面就如何反编译做一个简单的记录 ...
- 【转】Doscommand-操作Cmd的第三方控件
核心用法: Doscommand1.CommandLine := 'cmd /c' +[命令];Doscommand1.OutputLines :=Memo1.Lines;Doscommand1.Ex ...
- Sql Server数据库之通过SqlBulkCopy快速插入大量数据
废话不多说,直接上代码 /// <summary> /// 海量数据插入方法 /// </summary> /// <param name="connectio ...