小 X 与位运算 (bignum.*)
【题目描述】
自从上次小X 搞定了完美数之后,他最近在研究一项和计算机密切相关的黑科技。要知道在计算机的内部,数据都是以二进制的形式来进行存储的,而它使用的计算方法也和我们平时的加减乘除四则运算 有所不同,它使用的是位运算。那什么是位运算呢? 基础位运算有三种符号,分别是 and,or,xor(分别对应 pascal 中的 and,or,xor 三种运算符 号)。
以 and 为例,两个二进制数在做 and 运算时,分别对两个二进制数的每一位做 and 运算。而对每一 位做and 运算时,遵守以下规则:只有当两个数的这一位都是 1 时,运算结果才为 1,否则就是 0。例如 1101 和10101 做and 运算之后结果为101(高位不足用0 补齐,最后结果忽略前导0)。 通俗点讲 and 运算就是按位做乘法,即将两个二进制数从高位到低位依次对齐,然后每一位上对齐 的两个数相乘即得到这一位的结果 。我们可以列一个简单的例子来说明个and运算:01101 and 10101 = 00101。
而or,xor 的运算方法类似,唯一不同的是在对每一位做运算时遵循的方法不同。 or 运算遵守以下规则:只有当两个数的这一位都是 0 时,运算结果才为 0,否则就是 1。例如1101or10101=11101。
xor 运算遵守以下规则:只有当两个数的这一位相同时,运算结果才为0,否则就是1。例如1101xor10101=11000 。
小 X想知道两个很大很大的二进制数,在做完位运算之后, 最后的结果是什么。而小X 自己无法知道正确答案是什么,他只好求助于你来帮助他解决这个问题。
【输入】
输入数据第一行是一个字符串,由字符0 和1组成,表示一个二进制数。 第二行也是一个字符串,由字符0 和1组成,同样表示一个二进制数。 第三行还是一个字符串,一定是and,or,xor三个中一种,表示运算符号。 注意输入的二进制数没有前导零,字符个数可能会超过255 个。
【输出】
输出一行一个字符串,由字符0和1 组成,表示最后运算得到的二进制数。 注意输出的二进制数不能带有前导零,即输出的第一个字符不能为0。
【输出样例】
110100
11001
or
【输出样例】
111101
【数据范围】
用n 来表示输入的最长的二进制数的长度。
对于30% 的数据,1 ≤ n ≤ 20。
对于70% 的数据,1 ≤ n ≤ 1000。
对于100% 的数据,1 ≤ n ≤ 100000。
信息
- 难度
- 9
- 分类
- (无)
- 标签
- 递交数
- 4
- 已通过
- 4
- 通过率
- 100%
- 上传者