代码实现:
方法一:三次反转
void fanZhuan(char *a) { int len = strlen(a); for (int i = 0; i < len / 2; i++) { char temp = a[i]; a[i] = a[len - 1 - i]; a[len - 1 - i] = temp; } } char* addBinary(char *a, char *b) { fanZhuan(a); fanZhuan(b); int len_a = strlen(a), len_b = strlen(b); int n = len_a > len_b ? len_a : len_b; char *res = malloc(sizeof(char) * (n + 2)); int flag = 0, resSize = 0; for (int i = 0; i < n; i++) { flag += i < len_a ? (a[i] == '1') : 0; flag += i < len_b ? (b[i] == '1') : 0; res[resSize++] = flag % 2 + '0'; flag /= 2; } if (flag) { res[resSize++] = '1'; } res[resSize] = '\0'; fanZhuan(res); return res; }
方法二:一次反转
void fanZhuan(char *a) { int len = strlen(a); for (int i = 0; i < len / 2; i++) { char temp = a[i]; a[i] = a[len - 1 - i]; a[len - 1 - i] = temp; } } char* addBinary(char *a, char *b) { int len_a = strlen(a), len_b = strlen(b); int n = len_a > len_b ? len_a : len_b; char *ret = malloc(sizeof(char) * (n + 2)); int retSize = 0; int i = len_a - 1, j = len_b - 1; int c = 0; while (c || i >= 0 || j >= 0) { int num = 0; if (i >= 0) { num += a[i] - '0'; i--; } if (j >= 0) { num += b[j] - '0'; j--; } int val = (num + c) % 2; c = (num + c) / 2; ret[retSize++] = val + '0'; } ret[retSize] = '\0'; // 反转ret fanZhuan(ret); return ret; }