侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【上海】【二进制异或】

Allen Best
2023-08-01 / 0 评论 / 0 点赞 / 116 阅读 / 561 字
温馨提示:
本文最后更新于 2023-08-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
#include <bits/stdc++.h>
using namespace std;
int main() {
    string a, b;
    string s = "";
    cin >> a >> b;
    int lena = a.length();
    int lenb = b.length();
    if (lena < lenb) {//如果b比a长,则交换a,b,保证a比b长
        swap(a, b);
        swap(lena, lenb);
    }
    for (int i = lena - 1, j = lenb - 1; i >= 0; i--, j--) {//从末尾(个位)开始计算
        if (j < 0) {//b到头了,只挪a过去
            s = a[i] + s;
        } else {//按位做异或计算
            if (a[i] == '1' && b[j] == '0' || a[i] == '0' && b[j] == '1') {
                s = '1' + s;
            } else {
                s = '0' + s;
            }
        }
    }
    bool flag = 1;//前导零标志
    for (int i = 0; i < s.length(); i++) {
        if (s[i] == '0' && flag == 1) {//是前导零
            continue;
        } else {//不是前导零
            cout << s[i];
            flag = 0;//后续的0都不是前导零了
        }
    }
    return 0;
}
0

评论区