OpenJudge

1046:CZP1604小X与位运算

总时间限制:
10000ms
单个测试点时间限制:
1000ms
内存限制:
262144kB
描述

自从上次小X搞定了完美数之后,他最近在研究一项和计算机密切相关的黑科技。

要知道在计算机的内部,数据都是以二进制的形式来进行存储的,而它使用的计算方法也和我们平时的加减乘除四则运算有所不同,它使用的是位运算。那什么是位运算呢?

基础位运算有三种符号,分别是and,or,xor(分别对应pascal中and,or,xor三种运算符号)。

以and为例,两个二进制数在做and运算时,分别对两个二进制数的每一位做and运算。而对每一位做and运算时,遵守以下规则:只当两个数的这一位都是1时,运算结果才为1,否则就是0。 例如1101和10101做and运算之后结果为101(高位不足用0补齐,最后结果忽略前导0)。

通俗点讲 and 运算就是按位做乘法, 即将两个二进制数从高位到低位依次对齐,然后每一位上对齐的两个数相乘即得到这一位的结果 。

我们可以列一个简单的竖式来模拟这个 and 运算:
    01101
    10101
and
----------------
    00101
结果 00101 最左边的两个 0 即为前导 0,前导 0 一般要忽略。

而 or, xor 的运算方法类似, 唯一不同的是在对每一位做运算时遵循的方法不同。

or 运算遵守以下规则:只 有当两个数的这一位都是 0 时,运算结果才为 0, 否则就是 1。

例如 1101和 10101 做 or 运算之后结果为 11101
    01101
    10101
or
--------------
    11101
xor 运算遵守以下规则:只有当两个数的这一位相同时,运算结果才为 0, 否则就是 1。

例如 1101 和10101 做 xor 运算之后结果为 11000
    01101
    10101
xor
---------------
    11000
我们可以用一张简单的表格来说明三种位运算的运算规则


小X当然不会满足于最简单的位运算了。小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

每个题目的视频讲解会逐步推出,请访问
http://i.youku.com/oiclub

全局题号
14433
添加于
2017-04-08
提交次数
43
尝试人数
29
通过人数
28