二进制求和

 

 c++:

class Solution {
public:
    string addBinary(string a, string b) {
        if(a == "") return b;
        if(b == "") return a;
        int i = a.size() - 1;
        int j = b.size() - 1;
        int c = 0;//进位
        string temp;
        while(i>=0 || j >=0 )
        {
            if(i>=0) c+= a[i--] - '0';
            if(j>=0) c+=b[j--] - '0';
            temp += to_string(c%2);
            c >>= 1; 
        }
        reverse(temp.begin(),temp.end());
        string ans = temp;
        return c > 0 ? '1'+ans : ans;
    }
};

c:

#define MAX_SIZE 100

char *addBinary(char *a, char *b) {
    // 结果字符串
    char *res = (char *) malloc(sizeof(char) * MAX_SIZE);
    memset(res, 0, sizeof(char) * MAX_SIZE);
    int i, j, tmp, k = 0, len = 0;
    for (i = strlen(a) - 1, j = strlen(b) - 1; i >= 0 || j >= 0; i--, j--) {
        // 对位相加
        tmp = (i >= 0 ? a[i] - '0' : 0) + (j >= 0 ? b[j] - '0' : 0) + k;
        res[len++] = tmp % 2 + '0';
        k = tmp / 2;
    }
    // 处理最高位的进位
    while (k > 0) {
        res[len++] = k % 2+ '0';
        k = k / 2;
    }
    res[len] = '\0';
    // 字符串翻转
    for (i = 0; i < len / 2; ++i) {
        char temp = res[len - i - 1];
        res[len - i - 1] = res[i];
        res[i] = temp;
    }
    return res;
}

 

posted @ 2021-01-25 23:44  然终酒肆  阅读(59)  评论(0编辑  收藏  举报