给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。

时间: 2024-04-30 10:17:33 浏览: 11
可以将两个二进制字符串先转化为十进制数,然后相加后再将和转化为二进制字符串。 代码如下: ```python def addBinary(a: str, b: str) -> str: # 将两个二进制字符串转化为十进制数 num_a = int(a, 2) num_b = int(b, 2) # 计算和 sum_num = num_a + num_b # 将和转化为二进制字符串 res = bin(sum_num)[2:] return res ``` 其中,`int(a, 2)` 表示将二进制字符串 `a` 转化为十进制数,`bin(sum_num)` 表示将十进制数 `sum_num` 转化为二进制字符串。注意,转化后的二进制字符串前两个字符为 `'0b'`,需要去掉,所以用 `[2:]` 取子字符串。
相关问题

给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。用C++

以下是一个可能的 C 语言实现: ```c #include <string.h> #include <stdlib.h> char* addBinary(char* a, char* b) { int len_a = strlen(a); int len_b = strlen(b); int len_res = (len_a > len_b ? len_a : len_b) + 1; char* res = (char*)malloc(sizeof(char) * (len_res + 1)); res[len_res] = '\0'; int carry = 0; int i = len_a - 1; int j = len_b - 1; int k = len_res - 1; while (i >= 0 || j >= 0 || carry > 0) { int sum = carry; if (i >= 0) sum += a[i--] - '0'; if (j >= 0) sum += b[j--] - '0'; res[k--] = sum % 2 + '0'; carry = sum / 2; } while (res[k + 1] == '0') k++; if (k < 0) { char* zero = (char*)malloc(sizeof(char) * 2); zero[0] = '0'; zero[1] = '\0'; free(res); return zero; } else { char* result = (char*)malloc(sizeof(char) * (len_res - k + 1)); memcpy(result, res + k + 1, len_res - k); free(res); return result; } } ``` 该函数的参数是两个二进制字符串 `a` 和 `b`,返回值是它们的和的二进制字符串。其中,我们需要先确定结果字符串的长度 `len_res`,然后从低位到高位依次计算每一位的和,并且保存进位 `carry`。最后,我们需要去掉结果字符串的前导零,并且注意特殊情况,如 "0" + "0" = "0"。

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

可以使用位运算来实现二进制字符串的加法。 首先将两个二进制字符串补齐到相同的长度,然后从低位到高位逐位相加,同时考虑进位。具体实现如下: ```python def addBinary(a: str, b: str) -> str: # 补齐到相同的长度 n = max(len(a), len(b)) a = a.zfill(n) b = b.zfill(n) # 从低位到高位逐位相加 carry = 0 ans = [] for i in range(n-1, -1, -1): if a[i] == '1': carry += 1 if b[i] == '1': carry += 1 if carry % 2 == 1: ans.append('1') else: ans.append('0') carry //= 2 # 处理最高位的进位 if carry == 1: ans.append('1') ans.reverse() return ''.join(ans) ``` 例如,对于输入的两个二进制字符串 a = "1010" 和 b = "1011",输出的二进制字符串为 "10101",即十进制数的 10 + 11 = 21 的二进制表示。

相关推荐

最新推荐

recommend-type

Android 实现图片转二进制流及二进制转字符串

主要介绍了Android 实现图片转二进制流及二进制转字符串,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

java 二进制数据与16进制字符串相互转化方法

今天小编就为大家分享一篇java 二进制数据与16进制字符串相互转化方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

C#中图片、二进制与字符串的相互转换方法

主要介绍了C#中图片、二进制与字符串的相互转换方法,涉及C#针对不同数据类型的解析与转换操作技巧,需要的朋友可以参考下
recommend-type

android手机应用源码Imsdroid语音视频通话源码.rar

android手机应用源码Imsdroid语音视频通话源码.rar
recommend-type

营销计划汇报PPT,市场品牌 推广渠道 产品 营销策略tbb.pptx

营销计划汇报PPT,市场品牌 推广渠道 产品 营销策略tbb.pptx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。