这个题目相对有点奇怪,题目如下:

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

For example,

a = "11"

b = "1"

Return "100".

可能是我思路的问题吧,我之前是在考虑先将string转成int或者double,然后将二进制转为十进制进行计算,最后再将这个十进制转为二进制再转为string返回。这个思路本来是没问题的。但是。。。。。在最后一个测试用例中,他给了一个超长的二进制串,其实也是,一个长度为100的string是很正常的,但是如果这个长度为100的string是一个二进制数,这个数字就已经挺可怕的了。我又不想强行引入big num,所以我写了一套string的二进制加法器。

题解如下:

class Solution {
public:
string addBinary(string a, string b)
{
reverse(a.begin(), a.end());
reverse(b.begin(), b.end()); int i = 0;
int flag = 0;
int lenA = a.length();
int lenB = b.length(); string c = "";
while (i < lenA && i < lenB)
{
if (a[i] - '0' + b[i] - '0' + flag >= 2)
{
c += (a[i] - '0' + b[i] - '0' + flag) % 2 + '0';
flag = 1;
}
else
{
c += a[i] - '0' + b[i] - '0' + flag + '0';
flag = 0;
}
i++;
} while (i < lenA)
{
if (a[i] - '0' + flag == 2)
{
flag = 1;
c += "0";
}
else
{
c += a[i] - '0' + flag + '0';
flag = 0;
}
i++;
} while (i < lenB)
{
if (b[i] - '0' + flag == 2)
{
flag = 1;
c += "0";
}
else
{
c += b[i] - '0' + flag + '0';
flag = 0;
}
i++;
} if (flag == 1)
{
c += "1";
} reverse(c.begin(), c.end()); return c;
}
};

在这里用flag来表示前一位是否进位,这里要注意的就是有可能本身的两位加上进位的flag会出现3的情况,所以要考虑取余。其余的都很简单。

最新文章

  1. Mybatis-mapper-xml-基础
  2. [Java IO]01_File类和RandomAccessFile类
  3. [MacOS] 终端使用ssh时,中文乱码问题处理
  4. linux修改ip地址的方法
  5. android:installLocation = &quot;auto&quot; 的用法
  6. 如何正确的将J2ee项目部署到Tomcat
  7. Apache MINA(一)
  8. java.lang.ClassNotFoundException: org.apache.struts.action.ActionServlet
  9. scrapy相关:splash安装 A javascript rendering service 渲染
  10. Java学习--抽象类和接口
  11. Unity3D学习笔记(二十六):MVC框架下的背包系统(1)
  12. Jenkins配置项目
  13. 互评Final版本——二次元梦之队——“I Do”
  14. python之Tkinter控件学习
  15. MAC OS 英语朗读功能
  16. Linux ulimit 命令
  17. 5 种使用 Python 代码轻松实现数据可视化的方法
  18. oracle-sql优化-通过分组和缓存减少不必要的读
  19. LoadRunner中对图表的分析说明
  20. Eclipse运行错误:Failed to load the JNI shared library的解决办法

热门文章

  1. Eclipse出现错误:The selection cannot be launched,and there are no recent launches
  2. chrome 调试跨域iframe
  3. 用R进行统计学分析
  4. MySql的基本架构续
  5. 亲, 我们来再重申一遍&quot;==&quot;和&quot;equals的区别
  6. 【校招面试 之 C/C++】第4题 拷贝构造函数被调用的3个时机
  7. IIS 访问不了,IIS有问题,IIS右击浏览没反应
  8. 9-n个人中选k个人的选择方法种类
  9. requestFullscreen()事件全屏不好使怎么解决
  10. How to add libraries to “External Libraries” in WebStorm/PhpStorm/Intellij