如果不使用+, - ,*,/和%运算符,检查数字是否为4的倍数。
def multipleFour(n):
if n == 1:
return False
XOR = 0
for i in range(n):
XOR = XOR ^ 1
return XOR == n
multipleFour(20)
我的回答是假的
答案 0 :(得分: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)
即。你的循环必须运行i = 1到i = n而不是i = 0到i = n-1。它必须是xor = xor ^ i
编辑:
正如评论中所指出的,对于范围内的i(1,n + 1)不符合不使用 + 的条件,但通过一点修改,事情可以解决 -
def multipleFour(n):
if n == 1:
return False
XOR = n
for i in range(1, n):
XOR = XOR ^ i
return XOR == n
multipleFour(20)
答案 1 :(得分:3)
XOR
以0
开头,您使用的唯一操作是XOR ^ 1
;结果只能是0
或1
。您的代码在False
上显式返回1
,并且无法在任何较大的数字上返回True
;它只应返回True
的{{1}}。
同时,很容易检查是否有4"而不使用+, - ,*,/和%运算符。",使用0
和{{1} }:
AND
答案 2 :(得分:2)
您可以检查二进制文件并避免将0
到n
的所有整数进行xoring:
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
的方法失败了。
更好的方法做同样的事情是 bitwise-and-with 3 ,这将测试二进制表示的最后两个零(在评论中归功于@ShadowRanger:< / p>
def x_of_4(n):
return not n & 3