A70604 | 小 X 与位运算(bignum)
题目描述
自从上次小 X 搞定了完美数之后, 他最近在研究一项和计算机密切相关的黑科技。要知道在计算机的内部,数据都是以二进制的形式来进行存储的,而它使用的计算方法也和我们平时的加减乘除四则运算有所不同, 它使用的是位运算。那什么是位运算呢?
基础位运算有三种符号,分别是 and, or, xor(分别对应与运算、或运算、异或运算三种运算)。
以 and 为例,两个二进制数在做 and 运算时,分别对两个二进制数的每一位做 and 运算。而对每一位做 and 运算时, 遵守以下规则:只有当两个数的这一位都是 1 时,运算结果才为 1, 否则就是 0。
例如:1101 和 10101 做 and 运算之后结果为 101(高位不足用 0 补齐,最后结果忽略前导 0)。
通俗点讲 and 运算就是按位做乘法, 即将两个二进制数从高位到低位依次对齐,然后每一位上对齐的两个数相乘即得到这一位的结果 。 我们可以列一个简单的竖式来模拟这个 and 运算:
01101
and 10101
----------------
00101
结果 00101 最左边的两个 0 即为前导 0,前导 0 一般要忽略。
而 or, xor 的运算方法类似, 唯一不同的是在对每一位做运算时遵循的方法不同。
or 运算遵守以下规则:只有当两个数的这一位都是 0 时,运算结果才为 0, 否则就是 1。 例如 1101 和 10101 做 or 运算之后结果为 11101。
01101
or 10101
--------------
11101
xor 运算遵守以下规则:只有当两个数的这一位相同时,运算结果才为 0, 否则就是 1。 例如 1101 和 10101 做 xor 运算之后结果为 11000 。
01101
xor 10101
---------------
11000
我们可以用一张简单的表格来说明三种位运算的运算规则。

小 X 当然不会满足于最简单的位运算了。小 X 想知道两个很大很大的二进制数,在做完位运算之后,最后的结果是什么。而小 X 自己无法知道正确答案是什么, 他只好求助于你来帮助他解决这个问题。
输入格式
输入数据第一行是一个字符串, 由字符 0 和 1 组成, 表示一个二进制数。
第二行也是一个字符串, 由字符 0 和 1 组成,同样表示一个二进制数。
第三行还是一个字符串,一定是 and, or, xor 三个中一种, 表示运算符号。
注意输入的二进制数没有前导零,字符个数可能会超过 255 个但不会超过 100000 个。
输出格式
输出一行一个字符串, 由字符 0 和 1 组成, 表示最后运算得到的二进制数。
注意输出的二进制数不能带有前导零,即在计算结果不为 0 时,输出的第一个字符不能为 0 。
输入输出样例
110100 11001 or
111101
思路
进制转换:十→R 用除基取余(余数倒序);R→十用按权展开。
步骤
1. 读入数与进制。
2. 按转换方向模拟短除或加权。
3. 注意字母表示的数码并输出。
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录AI
作答助手确定要清空代码吗?