使用 XOR (Python) 的 4 的倍数
Multiple of 4 using XOR (Python)
在不使用 +、-、* 和 % 运算符的情况下检查数字是否为 4 的倍数。
def multipleFour(n):
if n == 1:
return False
XOR = 0
for i in range(n):
XOR = XOR ^ 1
return XOR == n
multipleFour(20)
我的回答returns错
您可以检查二进制文件并避免对从 0
到 n
的所有整数进行异或运算:
0 0000
1 0001
2 0010
3 0011
4 0100 8 1000 12 1100
四的倍数的二进制签名是'00'
def x_of_4(n):
return bin(n)[-2:] == '00'
然而,虽然转换为字符串更易于可视化和理解,但这并不是最好的想法,并且此方法因n = 0
而失败。
一个更好的方法做同样的事情是按位与 3 这将测试二进制表示的最后两个零(归功于@ ShadowRanger 在评论中:
def x_of_4(n):
return not n & 3
您在 for 循环 以及 xor 语句 中弄错了。它应该像 -
def multipleFour(n):
if n == 1:
return False
XOR = 0
for i in range(1, n+1):
XOR = XOR ^ i
return XOR == n
multipleFour(20)
即你的循环必须 运行 for i=1 to i=n 而不是 i=0 to i=n-1。而且必须是xor = xor ^ i
编辑:
评论中指出,for i in range(1, n+1)不满足不使用+[=25=的条件], 但是稍微修改一下,这个东西可以解决为 -
def multipleFour(n):
if n == 1:
return False
XOR = n
for i in range(1, n):
XOR = XOR ^ i
return XOR == n
multipleFour(20)
您的 XOR
以 0
开头,您对它使用的唯一操作是 XOR ^ 1
;结果只能是 0
或 1
。您的代码在 1
上明确 returns False
,并且不能在任何更大的数字上 return True
;对于 0
.
它应该只有 return True
同时,使用 AND
和 NOT
:
可以很容易地检查某个东西是否是 4 "without using +, -, * ,/ and % operators." 的倍数
def multipleFour(n):
return not(n & 3)
在不使用 +、-、* 和 % 运算符的情况下检查数字是否为 4 的倍数。
def multipleFour(n):
if n == 1:
return False
XOR = 0
for i in range(n):
XOR = XOR ^ 1
return XOR == n
multipleFour(20)
我的回答returns错
您可以检查二进制文件并避免对从 0
到 n
的所有整数进行异或运算:
0 0000
1 0001
2 0010
3 0011
4 0100 8 1000 12 1100
四的倍数的二进制签名是'00'
def x_of_4(n):
return bin(n)[-2:] == '00'
然而,虽然转换为字符串更易于可视化和理解,但这并不是最好的想法,并且此方法因n = 0
而失败。
一个更好的方法做同样的事情是按位与 3 这将测试二进制表示的最后两个零(归功于@ ShadowRanger 在评论中:
def x_of_4(n):
return not n & 3
您在 for 循环 以及 xor 语句 中弄错了。它应该像 -
def multipleFour(n):
if n == 1:
return False
XOR = 0
for i in range(1, n+1):
XOR = XOR ^ i
return XOR == n
multipleFour(20)
即你的循环必须 运行 for i=1 to i=n 而不是 i=0 to i=n-1。而且必须是xor = xor ^ i
编辑:
评论中指出,for i in range(1, n+1)不满足不使用+[=25=的条件], 但是稍微修改一下,这个东西可以解决为 -
def multipleFour(n):
if n == 1:
return False
XOR = n
for i in range(1, n):
XOR = XOR ^ i
return XOR == n
multipleFour(20)
您的 XOR
以 0
开头,您对它使用的唯一操作是 XOR ^ 1
;结果只能是 0
或 1
。您的代码在 1
上明确 returns False
,并且不能在任何更大的数字上 return True
;对于 0
.
True
同时,使用 AND
和 NOT
:
def multipleFour(n):
return not(n & 3)