2021-12-25

二进制数相加

给定两个二进制字符串,返回它们的加和(也是一个二进制字符串的形式)。

string a = "11";
string b = "1";

返回“100”

【解析】:

这是一道很经典的题目,本身并没有算法上的难度。要点是通过数组模拟加法,一位一位地往上加,并注意处理进位。

【code】:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;

const int inf=0x3f3f3f3f;
const int maxn=1e6+5;

string addBinary(string a,string b){
   
    int carry = 0;
    string result;
    for (int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0;i--,j--){
   
        int ai = i >= 0 ? a[i] - '0' : 0;
        int bj = j >= 0 ? b[j] - '0' : 0;
        int val = (ai + bj + carry) % 2;
        carry = (ai + bj + carry) / 2;
        result.insert(result.begin(), val+'0');
    }
    if(carry==1)
        result.insert(result.begin(), '1');
    return result;
}

int main(){
   
    string a = "11";
    string b = "1";
    string result = addBinary(a, b);
    cout << result << endl;
    return 0;
}

主要:本题地一个扩展就是,如果不是二进制而是十六进制,如何求解。在上面地代码中很容易更改,将代码第 16 行和第 17 行中的 2 改成 16 就可以了。