【C】67 二进制求和

embedded/2024/11/13 9:04:10/

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* addBinary(char* a, char* b) {if (a == NULL || b == NULL) {return NULL;}int len_a = strlen(a);int len_b = strlen(b);int size = (len_a > len_b ? len_a : len_b) + 1; // 加一位给可能的进位char* res = (char*)malloc((size + 1) * sizeof(char)); // +1 用于存放结尾的 '\0'res[size] = '\0'; // 确保字符串末尾为 '\0'size--;int carry = 0; // 进位while (len_a > 0 || len_b > 0) {int num_a = (len_a > 0) ? (a[--len_a] - '0') : 0;int num_b = (len_b > 0) ? (b[--len_b] - '0') : 0;int sum = num_a + num_b + carry;res[size--] = (sum % 2) + '0'; // 取余数并转换为字符carry = sum / 2; // 计算进位}if (carry) { // 如果最高位有进位res[size--] = carry + '0';}return res + size + 1; // 返回实际的字符串起始地址
}int main() {char a[] = "1011";char b[] = "101";char* result = addBinary(a, b);printf("Sum: %s\n", result);free(result); // 释放动态分配的内存return 0;
}

通过遍历两个字符串的每一位,进行加法运算并考虑进位,最终得到结果
注意:
返回 res 并不总是会得到正确的结果,因为 res 指向的是结果字符串的起始位置,而结果字符串可能会比 res 所指向的位置长一位,这取决于是否有进位产生。
在没有进位的情况下,结果字符串的长度将比输入字符串的长度长一位,因为需要多出一个位置来存储进位。在这种情况下,返回 res 将不会得到正确的结果,因为它指向的是结果字符串的起始位置,而不包括额外的进位位置。
因此,为了确保返回的是结果字符串的正确起始地址,应该返回 res + size + 1。这样做的原因是,size 在计算结果时被递减到了结果字符串的起始位置前一个位置,加上 1 之后指向了结果字符串的起始位置。
所以,返回 res + size + 1 可以确保我们返回的是结果字符串的正确起始地址,而不是 res 的起始地址

时间复杂度分析
遍历输入的两个二进制字符串,需要线性时间,即 O(max(m, n)),其中 m 和 n 分别是字符串 a 和 b 的长度。
在遍历过程中,执行加法运算和更新结果数组的操作需要常数时间。
最终返回结果需要反转结果字符串,其时间复杂度也是线性的,为 O(max(m, n))。
综上所述,addBinary 函数的时间复杂度为 O(max(m, n))。

空间复杂度分析
除了存储结果外,我们只使用了常数额外的空间。
结果字符串的长度最多为 max(m, n) + 1,因为可能存在进位。
因此,addBinary 函数的空间复杂度为 O(max(m, n))。


http://www.ppmy.cn/embedded/34554.html

相关文章

shamefully-hoist = true

在根目录下创建npm的配置文件.npmrc&#xff0c;增加配置项 shamefully-hoist true 是一个在 pnpm&#xff08;一个快速的、磁盘效率高的包管理器&#xff09;中使用的配置选项。pnpm 的主要特点之一是它使用硬链接和符号链接来避免复制相同的包到每个项目的 node_modules 文件…

数据结构===树

文章目录 概要概念相关概念 有哪些常用的树小结 概要 树是一种新的数据结构&#xff0c;不同于数组&#xff0c;链表。就像大自然中的树&#xff0c;看下这个数据结构&#xff0c;很有意思&#xff0c;有一个主干&#xff0c;然后还有很多树叉&#xff0c;即支干。不错&#xf…

uniapp 应用闪退、崩溃异常日志捕获插件(可对接网络上报)插件 Ba-Crash

应用闪退、崩溃异常日志捕获插件&#xff08;可对接网络上报&#xff09; Ba-Crash 简介&#xff08;下载地址&#xff09; Ba-Crash 是一款uniapp应用闪退、崩溃异常日志捕获插件&#xff0c;支持对接网络上报、设置提示等等&#xff0c;方便对一些远程问题、原生问题进行分…

影响外汇交易盈利的因素有哪些?

外汇交易就是通过汇率的差价来赚取相应的利润。在外汇交易中&#xff0c;投资者是否可以盈利&#xff0c;主要取决于是否正确的判断了市场趋势和行情。投资者在交易过程中受到主观和客观的因素影响&#xff0c;具体包含这些内容。 影响外汇交易盈利的因素有哪些&#xff1f; 1、…

老阳:跨境选品师怎么做更容易赚钱?

在跨境电商日益繁荣的今天&#xff0c;跨境选品师作为供应链上的重要一环&#xff0c;其职责与收入也备受关注。如何成为一名优秀的跨境选品师&#xff0c;并在这一岗位上赚得更多呢?以下是一些建议。 一、精准把握市场趋势 跨境选品师需要具备敏锐的市场洞察力&#xff0c;能…

富格林:了解黑幕套路正规方法预防

富格林悉知&#xff0c;存于市场中的黑幕亏损&#xff0c;不仅扰乱市场秩序&#xff0c;还使得不少的投资者受害亏损&#xff0c;面对诱导黑幕陷阱&#xff0c;一定要注意采取正规的方法防范避免受害亏损。投资者在进入市场之前&#xff0c;可从黑幕案件中了解黑幕亏损原因&…

AutoGroup是一种推荐场景的自动特征交互建模算法 采用了高效的分组算法 基于机器学习的选项,通过训练模型进行智能划分,确保结果的合理性。

AutoGroup AutoGroup是一种推荐场景的自动特征交互建模算法,其核心功能是基于预定义的规则或机器学习模型,自动将输入数据集分成多个组。这种分组功能可以应用于各种场景,如用户细分、市场分析、学术研究等。 在技术层面,AutoGroup采用了高效的分组算法,使得其能够在大规…

力扣题目101:对称二叉树

题目描述 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 输入格式 root&#xff1a;二叉树的根节点。 输出格式 返回布尔值&#xff0c;表示树是否对称。 示例 示例 1 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;True 示例 2 输入&#xff1a;ro…