您的位置:首页 > 房产 > 建筑 > 上海市计算机学会竞赛平台2023年6月月赛丙组二进制异或

上海市计算机学会竞赛平台2023年6月月赛丙组二进制异或

2024/12/23 15:34:15 来源:https://blog.csdn.net/a121677_/article/details/140069075  浏览:    关键词:上海市计算机学会竞赛平台2023年6月月赛丙组二进制异或
题目描述

给定两个只包含 0,1 的二进制数字,请你求出两个数字异或以后的二进制值是多少?(两个数字异或是指其二进制形式下按位做异或运算)

所谓异或,是指不同值异或结果为1,相同值异或结果为0,即:

0⊕0=00⊕1=11⊕0=11⊕1=00⊕0=00⊕1=11⊕0=11⊕1=0

输入格式

输入共两行,每行一个二进制数字

输出格式

输出共一行,一个二进制数字表示答案

数据范围

对于50%50%的数据,输入的二进制数字长度不超过7位
对于100%100%的数据,输入的二进制数字长度不超过100位

注意:输入的两个二进制数字长度可能不相同

样例数据

输入:

1101
1110

输出:

11

说明:

按位异或的答案为0011,去掉前导0后即为11

输入:

100101
1010

输出:

101111

详见代码:

#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) {swap(a, b);swap(lena, lenb);}for (int i = lena - 1, j = lenb - 1; i >= 0; i--, j--) {if (j < 0) {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;}}return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com