许多编程语言都提供了用于操作整数的二进制(以2为基数)的运算符。这是将这些运算符推广到其他基础的一种方法:
令x和y为基数B中的一位数字。定义一元运算符~
和二元运算&
,|
以及^
这样的:
- 〜x =(B-1)-x
- x&y = min(x,y)
- x | y =最大值(x,y)
- x ^ y =(x&〜y)| (y&〜x)
注意,如果B = 2,我们将得到熟悉的按位NOT,AND,OR和XOR运算符。
对于B = 10,我们得到“十进制XOR”表:
^ │ 0 1 2 3 4 5 6 7 8 9
──┼────────────────────
0 │ 0 1 2 3 4 5 6 7 8 9
1 │ 1 1 2 3 4 5 6 7 8 8
2 │ 2 2 2 3 4 5 6 7 7 7
3 │ 3 3 3 3 4 5 6 6 6 6
4 │ 4 4 4 4 4 5 5 5 5 5
5 │ 5 5 5 5 5 4 4 4 4 4
6 │ 6 6 6 6 5 4 3 3 3 3
7 │ 7 7 7 6 5 4 3 2 2 2
8 │ 8 8 7 6 5 4 3 2 1 1
9 │ 9 8 7 6 5 4 3 2 1 0
对于多位数字,请逐位应用一位数字运算符。例如,12345 ^ 24680 = 24655,因为:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
如果操作数的长度不同,则用前导零填充较短的一。
挑战
以尽可能少的字节编写一个程序或函数,该程序或函数将两个整数(可以假定为介于0和999 999 999之间(含0和999之间))作为输入,并输出上述两个数字的“十进制XOR”。
测试用例
- 12345,24680→24655
- 12345,6789→16654
- 2019,5779→5770
- 0,999999999→999999999
- 0,0→0
09
输入的结果是否可以接受90, 99
?
A^B^B=A
a^b=b^a
,并a^b^b=a
为基地与奇素因子