列表

详情


OR106. 字符串加法

描述



输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:
/**
*
@param a = "1101"
*
@param b = "1100"
*
@return "11001"
*/
public String add(String a, String b){ }

数据范围:

输入描述

输入两个字符串,如"1101", "1100"

输出描述

"11001"

示例1

输入:

1101 1100

输出:

11001

示例2

输入:

0 1

输出:

1

原站题解

C++ 解法, 执行用时: 3ms, 内存消耗: 304KB, 提交时间: 2021-03-21

#include<bits/stdc++.h>
using namespace std;
string add(string &a, string &b) {
    string res;
    reverse(a.begin(), a.end()  );
    reverse(b.begin() , b.end() );
    int size = max(a.size() , b.size());
    int t=0;
    for(int i=0;i<size;++i) {
        if (i< a.size()) t+= a[i]-'0';
        if( i< b.size() ) t+= b[i] -'0';
        res.push_back(t%2  +'0');
        t/=2;
    }
    
    if(t) res.push_back('1');
    reverse(res.begin() ,res.end() );
    return res;
    
    
    
}
int main(void) {
    
    string x,y;
    cin>> x>>y ;
    cout << add(x,y) <<endl;
    return 0;
    
}










C++14 解法, 执行用时: 3ms, 内存消耗: 304KB, 提交时间: 2020-07-25

#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;
}

上一题