1. 程式人生 > >二進位制求和(LintCode)

二進位制求和(LintCode)

題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/add-binary/ 題目:

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

您在真實的面試中是否遇到過這個題? Yes 樣例

a = 11

b = 1

返回 100


難度級別: 容易 思路分析: 此題思路較為簡單,認真判斷進位就可以了。 需要注意的是,需要仔細判斷是否存在最後一次進位,即進位緩衝區的值是否都加起來了 實現程式碼:
#include <iostream>
#include <string>

using namespace std;

class Solution
{
public:
	/**
	* @param a a number
	* @param b a number
	* @return the result
	*/
	string addBinary(string& a, string& b)
	{
		string result = "";
		int c = 0, num = 0;
		int i = a.size() - 1, j = b.size() - 1;
		for (; i >= 0 && j >= 0; i--, j--)
		{
			num = (a[i] - '0') + (b[j] - '0') + c;
			c = num / 2;
			num = num % 2;
			result += ('0' + num);
		}
		for (; i >= 0; i--)
		{
			num = (a[i] - '0') + c;
			c = num / 2;
			num = num % 2;
			result += ('0' + num);
		}
		for (; j >= 0; j--)
		{
			num = (b[j] - '0') + c;
			c = num / 2;
			num = num % 2;
			result += ('0' + num);
		}
		if (c != 0)
		{
			result += ('0' + c);
		}
		i = 0; j = result.size() - 1;
		while (i < j)
		{
			char temp = result[i];
			result[i] = result[j];
			result[j] = temp;
			i++; j--;
		}
		return result;
	}
};


int main()
{
	string s1 = "11";
	string s2 = "1";
	Solution st;
	cout << st.addBinary(s1, s2);

	return 0;
}


程式碼說明: num表示當前位置的數,c表示進位緩衝區  最後一個while的迴圈是因為之前形成的字串次序是顛倒的,所以用while迴圈進行糾正。