二進位制求和(LintCode)
阿新 • • 發佈:2019-01-07
題目來源:LintCode
原題地址:http://www.lintcode.com/zh-cn/problem/add-binary/
題目:
難度級別: 容易 思路分析: 此題思路較為簡單,認真判斷進位就可以了。 需要注意的是,需要仔細判斷是否存在最後一次進位,即進位緩衝區的值是否都加起來了 實現程式碼:
程式碼說明: num表示當前位置的數,c表示進位緩衝區 最後一個while的迴圈是因為之前形成的字串次序是顛倒的,所以用while迴圈進行糾正。
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
您在真實的面試中是否遇到過這個題? 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迴圈進行糾正。