二进制求和
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; }