首页 > 其他 > 详细

leetcode Add Binary

时间:2014-04-03 17:45:09      阅读:460      评论:0      收藏:0      [点我收藏+]

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

For example,
a = "11"
b = "1"

Return "100".

这道也是水题,但是注意有前导0,还有全0的时候输出为0。.还有最后结果的处理。

#include <iostream>
#include <string>

using namespace std;

class Solution {
public:
	string addBinary(string a, string b) {
		if (a.empty())
		{
			return b;
		}
		if (b.empty())
		{
			return a;
		}

		int i = 0;
		int j = 0;

		for (; i < a.size(); ++i)
		{
			if (a[i] != ‘0‘)
			{
				break;
			}
		}

		if (i == a.size())
		{
			a.clear();
		}
		else
		{
			a = a.substr(i);
		}

		for (; j < b.size(); ++j)
		{
			if (b[j] != ‘0‘)
			{
				break;
			}
		}

		if (j == b.size())
		{
			b.clear();
		}
		else
		{
			b = b.substr(j);
		}

		int size = a.size() > b.size() ? a.size()+1 : b.size()+1;
		string res(size, ‘0‘);
		int k = res.size() - 1;
		if (k==0)
		{
			return "0";
		}
		i = a.size() - 1;
		j = b.size() - 1;
		int flag = 0;


		while(i >= 0 && j >= 0)
		{
			int num1 = a[i--] - ‘0‘;
			int num2 = b[j--] - ‘0‘;
			int tmp = num1+num2 +flag;
			res[k--] = tmp % 2+ ‘0‘;
			flag = tmp / 2;
		}

		while (i >= 0)
		{
			int num1 = a[i--] - ‘0‘;
			int tmp = num1+flag;
			res[k--] = tmp % 2+ ‘0‘;
			flag = tmp / 2;
		}

		while (j >= 0)
		{
			int num2 = b[j--] - ‘0‘;
			int tmp = num2 +flag;
			res[k--] = tmp % 2 + ‘0‘;
			flag = tmp / 2;
		}

		if (0 != flag && k >= 0)
		{
			res[k--] = flag + ‘0‘;
		}
		return res.substr(++k);
	}
};

int main()
{
	Solution s;
	printf("%s\n", s.addBinary("00", "000").c_str());
};


leetcode Add Binary,布布扣,bubuko.com

leetcode Add Binary

原文:http://blog.csdn.net/boyxiaolong/article/details/22865381

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!