力扣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; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2434987.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!