题目描述]: 输入两个二进制数,求两个数相加的结果 [输入格式]:从键盘输入两个正整数 n1和 n2,代表两个二进制数的位数,接下来两行输入长度分别为 n1 和 n2 的数组,数组元素为 0或者1(长度大于1 时,第一个元素必不为0),数组元素用空格隔开
时间: 2024-05-15 21:13:13 浏览: 91
汇编语言之 两个多位十进制数相加
好的,您的问题是怎样求两个二进制数相加的结果。您可以参考以下代码:
```
#include <iostream>
#include <vector>
using namespace std;
vector<int> addBinary(vector<int>& a, vector<int>& b) {
int n = a.size(), m = b.size();
if (n < m) return addBinary(b, a);
vector<int> res(n, 0);
int carry = 0;
for (int i = 0; i < n; ++i) {
carry += a[n - 1 - i];
if (i < m) carry += b[m - 1 - i];
res[n - 1 - i] = carry % 2;
carry /= 2;
}
if (carry) res.insert(res.begin(), 1);
return res;
}
int main() {
int n1, n2;
cin >> n1 >> n2;
vector<int> a(n1), b(n2);
for (int i = 0; i < n1; ++i) {
cin >> a[i];
}
for (int i = 0; i < n2; ++i) {
cin >> b[i];
}
vector<int> res = addBinary(a, b);
for (int i = 0; i < res.size(); ++i) {
cout << res[i] << " ";
}
cout << endl;
return 0;
}
```
解释一下代码:我们可以定义一个函数 `addBinary`,这个函数的参数是两个向量 `a` 和 `b`,表示两个二进制数(每个二进制数可以用长度为 $n$ 的整数数组表示,数组中的每个元素为 0 或者 1)。这个函数的返回值是一个向量 `res`,表示两个二进制数相加的结果。
我们可以先将两个二进制数对齐,然后从后往前逐位相加。利用一个变量 `carry` 记录进位,最后得到的结果即为所求。
主函数中我们可以先读入两个二进制数的长度和数组,然后调用函数 `addBinary` 计算结果并输出。
阅读全文