Leetcode67. 二进制求和

你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

1
2
3
4
5
6
7
8
示例 1:

输入: a = "11", b = "1"
输出: "100"
示例 2:

输入: a = "1010", b = "1011"
输出: "10101"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
public:
string addBinary(string m, string n) {
string m1;
reverse(m.begin(),m.end());
reverse(n.begin(),n.end());
int count = 0;// 进位
int m_len = m.size();
int n_len = n.size();
int max_size = max(m_len,n_len);
int now;
int i;
for ( i = 0; i < max_size; ++i) {
if(i<(m_len)&&(i<n_len)){
now = m[i]-'0'+n[i]-'0'+count;
} else if(i<m_len){
now = m[i]-'0'+count;
cout<<now<<endl;
} else if(i<n_len){
now = n[i]-'0'+count;
cout<<now<<endl;
}
m1.push_back((now)%2+'0');
count = (now)/2;
}
if(count==1){
m1.push_back('1');
}
reverse(m1.begin(),m1.end());
return m1;
}
};

延伸一下

你的任务是:对于任意的两个正的二进制数,求它们和中“1”所在的位置。

Input
有多组测试数据,每组测试数据共两行:

第一行:二进制的加数A,总长度<=200。

第二行:二进制的加数B,总长度<=200。

Output
输出二进制数A+B中“1”所在的位置,位置排序为从左到右:N、N-1、N-2…1,数据之间用空格分隔,行末没有多余的空格。

1
2
3
4
5
6
7
8
9
Samples
input
111
110
11101
110
output
4 3 1
6 2 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include "algorithm"
#include "cctype"
#include "string"
#include "stack"
#include "vector"
#include "unordered_set"
#include "unordered_map"
using namespace std;

int main() {
string m, n;
bool isPrint = false;
while (cin>>m>>n){
string m1;
isPrint= false;
reverse(m.begin(),m.end());
reverse(n.begin(),n.end());
int count = 0;// 进位
int m_len = m.size();
int n_len = n.size();
int max_size = max(m_len,n_len);
int now;
int i;
for ( i = 0; i < max_size; ++i) {
if(i<(m_len)&&(i<n_len)){
now = m[i]-'0'+n[i]-'0'+count;
} else if(i<m_len){
now = m[i]-'0'+count;
} else if(i<n_len){
now = n[i]-'0'+count;
}
m1.push_back((now)%2+'0');
count = (now)/2;
}
if(count==1){
m1.push_back('1');
}
reverse(m1.begin(),m1.end());
for (int j = 0; j < m1.size(); ++j) {
if(m1.at(j)=='1'&&isPrint== false){
cout<<(m1.size()-j);
isPrint= true;
}else if (isPrint&&m1.at(j)=='1'){
cout<<" ";
cout<<(m1.size()-j);
}
}
cout<<endl;
}
}

Leetcode67. 二进制求和
http://example.com/2021/02/07/Leetcode67. 二进制求和/
作者
shoukailiang
发布于
2021年2月7日
许可协议