LeetCode 67 Add Binary (Binary addition )(*)

Source: Internet
Author: User

LeetCode 67 Add Binary (Binary addition )(*)
Translation

Given two binary strings, return their sum (also a binary string ). For example, a = "11" B = "1" returns 100 ".
Original
Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".
Analysis

I wrote this algorithm at the beginning. Although it has implemented the function, it does not conform to the question intention.

int ctoi(char c) {    return (int)c - 48;}int pow2(int n) {    int sum = 1;    while ((n--) > 0)        sum *= 2;    return sum;}int btoi(string s) {    int sum = 0, len = s.size();    for (int i = 0; i < len; ++i) {        sum += ctoi(s[i]) * pow2(len - i - 1);    }    return sum;}string itob(int n) {    if (n == 0) return "0";    string s = "";    while (n >= 1) {        if (n % 2 == 1)            s += "1";        else s += "0";        n /= 2;    }    string newStr = "";    for (int i = s.size() - 1; i >= 0; i--)        newStr += s[i];    return newStr;}string addBinary(string a, string b) {    return itob(btoi(a) + btoi(b));}

Then I changed the code, and I was so drunk when writing such code ......

string addBinary(string a, string b) {    if (a.size() < b.size()) swap(a, b);    int len1 = a.size(), len2 = b.size();    int comLen = len1 < len2 ? len1 : len2;    int pos = 0;    string str = "";    for (int index1 = len1 - 1, index2 = len2 - 1; index1 > len1 - comLen, index2 >= 0; index1--, index2--) {        if (pos == 0) {            if (a[index1] == '1' && b[index2] == '1') {                str += "0";                pos = 1;            }            else if (a[index1] == '0' && b[index2] == '0') {                str += "0";            }            else {                str += "1";            }        }        else if (pos == 1) {            if (a[index1] == '1' &&b[index2] == '1') {                str += "1";                pos = 1;            }            else if (a[index1] == '0' && b[index2] == '0') {                str += "1";                pos = 0;            }            else {                str += "0";                pos = 1;            }        }    }    for (int index = len1 - comLen-1; index >= 0; index--) {        if (pos == 0) {            if (a[index] == '1') {                str += "1";            }            else {                str += "0";            }        }        else if (pos == 1) {            if (a[index] == '1') {                str += "0";                pos = 1;            }            else {                str += "1";                pos = 0;            }        }    }    if (pos == 1) str += "1";    string newStr = "";    for (int i = str.size() - 1; i >= 0; i--)        newStr += str[i];    return newStr;}

I did not find any very concise code after turning around, so let's do it first ......

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.