给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
时间: 2023-11-05 12:22:29 浏览: 53
好的,这是一个二进制加法问题。我可以给你一个简单的实现。
我们可以从字符串的末尾开始处理,将它们转换成数字,逐位相加,然后将结果转换成二进制形式。如果有进位,需要将进位加到下一位的计算中。
以下是实现的代码,你可以参考一下:
```python
def addBinary(a: str, b: str) -> str:
carry = 0
res = ""
i, j = len(a) - 1, len(b) - 1
while i >= 0 or j >= 0 or carry:
num1 = int(a[i]) if i >= 0 else 0
num2 = int(b[j]) if j >= 0 else 0
carry, curr = divmod(num1 + num2 + carry, 2)
res = str(curr) + res
i -= 1
j -= 1
return res
```
这段代码的时间复杂度为 $O(n)$,其中 $n$ 是 a 和 b 的长度之和。
相关问题
c语言编写给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
你好,你可以使用C语言的字符串库函数来完成这个任务。首先将两个二进制字符串转换为十进制整数。然后将它们相加,并将结果转换回二进制字符串格式。下面是一个示例代码:
```
#include <stdio.h>
#include <string.h>
char* addBinary(char* a, char* b) {
int lenA = strlen(a);
int lenB = strlen(b);
int maxLen = lenA > lenB ? lenA : lenB;
int carry = 0;
char* result = (char*)malloc((maxLen + 2) * sizeof(char));
result[maxLen + 1] = '\0';
int i, j, k;
for (i = lenA - 1, j = lenB - 1, k = maxLen; k >= 0; i--, j--, k--) {
int sum = carry;
if (i >= 0) {
sum += a[i] - '0';
}
if (j >= 0) {
sum += b[j] - '0';
}
result[k] = sum % 2 + '0';
carry = sum / 2;
}
if (carry > 0) {
result[0] = '1';
return result;
}
return result + 1;
}
int main() {
char a[] = "1010";
char b[] = "1011";
char* result = addBinary(a, b);
printf("%s\n", result);
free(result);
return 0;
}
```
这个函数将两个二进制字符串作为参数,并返回它们的和的二进制字符串。请注意,我们使用了动态内存分配来为结果字符串分配空间。
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 Java
以下是实现该功能的 Java 代码:
```java
public class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int carry = 0;
int i = a.length() - 1, j = b.length() - 1;
while (i >= 0 || j >= 0) {
int sum = carry;
if (i >= 0) {
sum += a.charAt(i) - '0';
i--;
}
if (j >= 0) {
sum += b.charAt(j) - '0';
j--;
}
sb.append(sum % 2);
carry = sum / 2;
}
if (carry != 0) {
sb.append(carry);
}
return sb.reverse().toString();
}
}
```
该代码使用 StringBuilder 存储结果,使用两个指针 i 和 j 分别指向 a 和 b 的最后一位,使用 carry 存储进位,从后向前遍历 a 和 b,将每一位相加,并加上进位,将结果取模后存入 StringBuilder 中。最后,如果还有进位,将其加入 StringBuilder 中。最后,将 StringBuilder 反转后转换为字符串并返回。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)