力扣67.二进制求和

力扣67.二进制求和 ##题目描述给你两个二进制字符串a和b以二进制字符串的形式返回它们的和。##解题思想模拟手工二进制加法从两个二进制字符串的最低位末尾开始逐位相加遵循逢二进一规则。双指针遍历使用两个指针i和j分别指向字符串a和b的末尾从后向前遍历。逐位计算每一位的总和 当前位 a 当前位 b 前一位进位当前位结果 总和 % 2新的进位 总和 / 2处理进位与边界循环条件包含进位确保最后剩余的进位能被正确存入结果。结果反转因为计算是从低位到高位存储的所以最后需要翻转字符串得到正确顺序。内存分配为结果分配maxLen 2的空间保证能容纳最长数字 进位 结束符\0防止越界。##题解代码#include stdio.h #include string.h #include stdlib.h char* addBinary(char *a, char *b) { int lenA strlen(a); int lenB strlen(b); int maxLen (lenA lenB) ? lenA : lenB; // 开辟空间多给2位防止越界 char *res (char*)malloc(maxLen 2); int i lenA - 1, j lenB - 1; int carry 0, index 0; while (i 0 || j 0 || carry) { int sum carry; if (i 0) sum a[i--] - 0; if (j 0) sum b[j--] - 0; carry sum / 2; res[index] (sum % 2) 0; } res[index] \0; // 翻转结果 for (int k 0; k index / 2; k) { char temp res[k]; res[k] res[index - 1 - k]; res[index - 1 - k] temp; } return res; }