输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**
* @param a = "1101"
* @param b = "1100"
* @return "11001"
*/
public String add(String a, String b){ }
数据范围: 
输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**
* @param a = "1101"
* @param b = "1100"
* @return "11001"
*/
public String add(String a, String b){ }
输入两个字符串,如"1101", "1100"
"11001"
1101 1100
11001
0 1
1
#include <bits/stdc++.h>
using namespace std;
int main(){
string a, b, s="";
cin>>a>>b;
int m = a.length(), n = b.length();
int c = 0;
if(m>n)
b = string(m-n, '0') + b;
else
a = string(n-m, '0') + a;
for(int i=max(m,n)-1;i>=0;i--){
c += a[i]-'0' + b[i]-'0';
s = char((c&1)+'0') + s;
c >>= 1;
}
if(c==1)
s = '1' + s;
cout<<s<<endl;
return 0;
}
"""" 进制间转换 ↓ 2进制 8进制 10进制 16进制 2进制 - bin(int(x, 8)) bin(int(x, 10)) bin(int(x, 16)) 8进制 oct(int(x, 2)) - oct(int(x, 10)) oct(int(x, 16)) 10进制 int(x, 2) int(x, 8) - int(x, 16) 16进制 hex(int(x, 2)) hex(int(x, 8)) hex(int(x, 10)) - """ if __name__ == "__main__": a = [int(x, 2) for x in input().strip().split()] print(str(bin(sum(a)))[2:])
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
string str1, str2;
cin >> str1 >> str2;
/*
* 0 + 1 = 1
* 1 + 1 = 10
* 0 + 0 = 0
*/
int carry = 0;
int i = str1.length() - 1;
int j = str2.length() - 1;
string res("");
while(i >= 0 && j >= 0){
char a = str1[i--];
char b = str2[j--];
if((a == '0' && b == '1') || (a == '1' && b == '0')){
if(carry){
res = "0" + res; //有进位
} else{
res = "1" + res; //无进位
}
} else if(a == '0' && b == '0'){
if(carry){
res = "1" + res; //有进位
carry = 0;
} else{
res = "0" + res; //无进位
}
} else if(a == '1' && b == '1'){
if(carry){
res = "1" + res;
} else{
res = "0" + res;
}
carry = 1; //肯定有进位
}
}
if(i >= 0){
while(i >= 0){
if(str1[i] == '0'){ //该位为“0”
if(carry){
res = "1" + res;
carry = 0;
} else{
res = "0" + res;
}
} else{ //该位为“1”
if(carry){
res = "0" + res;
} else{
res = "1" + res;
}
}
--i;
}
if(carry){
res = "1" + res;
}
} else if(j >= 0){
while(j >= 0){
if(str1[j] == '0'){ //该位为“0”
if(carry){
res = "1" + res;
} else{
res = "0" + res;
}
} else{ //该位为“1”
if(carry){
res = "0" + res;
} else{
res = "1" + res;
}
}
--j;
}
if(carry){
res = "1" + res;
}
} else{ //两个都走完
if(carry){
res = "1" + res;
}
}
cout << res << endl;
return 0;
} const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
ouput: process.stdout
})
rl.on('line', line=>{
let inArr = line.trim().split(' ')
let s1 = +inArr[0], s2 = +inArr[1]
//解法一
// let res = (parseInt(s1,2) + parseInt(s2,2)).toString(2)
//解法二
let res = (BigInt(`0b${s1}`)+BigInt(`0b${s2}`)).toString(2)
console.log(res)
}) import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str1 = scanner.next();
String str2 = scanner.next();
System.out.println(Integer.toBinaryString(Integer.valueOf(str1, 2) + Integer.valueOf(str2, 2)));
}
}
import java.util.*;
//二进制的加法
public class Main3 {
public static void main(String[] args){
Scanner sca = new Scanner(System.in);
String[] str = sca.nextLine().split(" ");
String a = str[0];
String b = str[1];
System.out.println(addBinary(a,b));
}
public static String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int aLen = a.length();
int bLen = b.length();
int max = Math.max(aLen, bLen);
StringBuilder ar = new StringBuilder(a).reverse();//反转,因为两个数从低位开始相加
StringBuilder br = new StringBuilder(b).reverse();
boolean isCarry = false;//是否进位
for (int i = 0; i < max; i++) {
char aChar = i >= aLeng ? '0' : ar.charAt(i);
char bChar = i >= bLen ? '0' : br.charAt(i);
if (aChar == '1' && bChar == '1') {
sb.append(isCarry ? '1' : '0');
isCarry = true;
} else if (aChar == '0' && bChar == '0') {
sb.append(isCarry ? '1' : '0');
isCarry = false;
} else {
sb.append(isCarry ? '0' : '1');
}
}
if (isCarry) sb.append("1");
return sb.reverse().toString();
}
} import sys messages = sys.stdin.readline().strip().split() num1 = messages[0] num2 = messages[1] num = int(num1,2)+int(num2,2) print(bin(num)[2:])
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
String a=in.next();
String b=in.next();
System.out.println(add(a,b));
}
}
public static String add(String a,String b){
int p1=a.length()-1;
int p2=b.length()-1;
int carry=0;
String ans="";
while(p1!=-1||p2!=-1||carry!=0){
int n1=(p1<0)?0:a.charAt(p1)-'0';
int n2=(p2<0)?0:b.charAt(p2)-'0';
int sum=n1^n2^carry;
carry=((n1&n2)==1)?1:((n1^n2)&carry);
ans=sum+ans;
if(p1>=0)p1--;
if(p2>=0)p2--;
}
return ans;
}
} import java.util.Scanner;
/**
* @Date: 2020-05-02 21:31
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] ch1 = sc.next().toCharArray();
char[] ch2 = sc.next().toCharArray();
int l1=ch1.length-1,l2=ch2.length-1,l3=(l1>l2?l1:l2)+1;
char[] r = new char[l3+1];//保存结果
r[l3] = '0';
int num = 0;
while (l1>=0&&l2>=0){
num=ch1[l1]-'0'+ch2[l2]-'0'+r[l3]-'0';
if (num==0){
r[l3]='0';
r[l3-1]='0';
}else if (num==1){
r[l3]='1';
r[l3-1]='0';
}else if (num==2){
r[l3]='0';
r[l3-1]='1';
}else {
r[l3]='1';
r[l3-1]='1';
}
l1--;l2--;l3--;
}
while (l1>=0){
num=ch1[l1]-'0'+r[l3]-'0';
if (num==0){
r[l3]='0';
r[l3-1]='0';
}else if (num==1){
r[l3]='1';
r[l3-1]='0';
}else{
r[l3]='0';
r[l3-1]='1';
}
l1--;l3--;
}
while (l2>=0){
num=ch2[l2]-'0'+r[l3]-'0';
if (num==0){
r[l3]='0';
r[l3-1]='0';
}else if (num==1){
r[l3]='1';
r[l3-1]='0';
}else{
r[l3]='0';
r[l3-1]='1';
}
l2--;l3--;
}
for (int i = 0;i<r.length;i++){
if (r[i]=='1'){
for (;i<r.length;i++)
System.out.print(r[i]);
}
}
}
} import sys
from collections import deque
if __name__ == "__main__":
#sys.stdin = open("input", "r")
x, y = input().strip().split()
if len(x) < len(y):
x, y = y, x
c = 0
ans = deque()
y = '0'*(len(x)-len(y)) + y
for i in range(-1, -len(x)-1, -1):
t1 = int(x[i]) ^ int(y[i])
s1 = int(x[i]) and int(y[i])
t2 = t1 ^ c
s2 = t1 and c
c = s1 or s2
ans.appendleft(str(t2))
if c != 0:
ans.appendleft(str(c))
print("".join(ans)) #include <bits/stdc++.h>
using namespace std;
const int maxlen = 1010;
char a[maxlen], b[maxlen], res[maxlen];
void reverseNum(char *s) {
int l = 0, r = strlen(s) - 1;
while(l < r) {
char temp = s[l];
s[l] = s[r];
s[r] = temp;
l++, r--;
}
}
void add(char *a, char *b) {
int i = 0, j = 0, k = 0;
int lena = strlen(a), lenb = strlen(b);
int curDigit = 0, acc = 0;
while(i < lena && j < lenb) {
curDigit = (a[i] - '0') + (b[j] - '0') + acc;
acc = curDigit / 2;
res[k++] = (curDigit % 2) + '0';
i++, j++;
}
while(i < lena) {
curDigit = (a[i] - '0') + acc;
acc = curDigit / 2;
res[k++] = (curDigit % 2) + '0';
i++;
}
while(j < lenb) {
curDigit = (b[j] - '0') + acc;
acc = curDigit / 2;
res[k++] = (curDigit % 2) + '0';
j++;
}
if(acc == 1)
res[k++] = acc + '0';
res[k] = '\0';
reverseNum(res);
printf("%s\n", res);
}
int main() {
int i, j;
scanf("%s %s", a, b);
reverseNum(a);
reverseNum(b);
add(a, b);
return 0;
} #include <iostream>
(720)#include <string>
using namespace std;
int main(){
string s1,s2,ans="";
cin>>s1>>s2;
int idx=0,l1=s1.size()-1,l2=s2.size()-1;
while (l1>=0 || l2>=0){
int c1=l1>=0?s1[l1]-'0':0,c2=l2>=0?s2[l2]-'0':0;
int p=c1+c2;
if (p==2){
if (p+idx==3){
ans="1"+ans;
}else{
ans="0"+ans;
}
idx=1;
}
else if (p==1){
if (p+idx==2){
ans="0"+ans;
idx=1;
}else{
ans="1"+ans;
idx=0;
}
}else{
if(p+idx==1){
ans="1"+ans;
}else{
ans="0"+ans;
}
idx=0;
}
l1--;
l2--;
}
if (idx==1)
ans="1"+ans;
cout<<ans;
return 0;
}
//python:print(bin(sum(map(lambda x:int(x,2),input().split())))[2:])