首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XOR (Python)的4的倍数

使用XOR (Python)的4的倍数
EN

Stack Overflow用户
提问于 2017-11-30 01:34:48
回答 3查看 651关注 0票数 1

若要不使用+、-、*和%运算符检查数字是否为4的倍数,请执行以下操作。

代码语言:javascript
复制
def multipleFour(n):
   if n == 1:
     return False
   XOR = 0
   for i in range(n):
        XOR = XOR ^ 1
   return XOR == n
multipleFour(20)

我的回答是假的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-30 01:43:34

您在中被误认为是循环以及xor语句。应该是-

代码语言:javascript
复制
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

编辑:

正如在评论中指出的,for I在范围(1,n+1)不满足不使用+的条件,但只要稍加修改,这件事情就可以解决如下问题:

代码语言:javascript
复制
def multipleFour(n):
       if n == 1:
         return False
       XOR = n
       for i in range(1, n):
            XOR = XOR ^ i
       return XOR == n
    multipleFour(20)
票数 3
EN

Stack Overflow用户

发布于 2017-11-30 01:46:29

您的XOR0开头,您所使用的唯一操作是XOR ^ 1;结果只能是01。您的代码显式地在1上返回True,并且不能在更大的数字上返回True;它应该只返回0True

同时,如果不使用+、-、*和%运算符,则很容易检查某物是否为4“的倍数。”,使用ANDNOT

代码语言:javascript
复制
def multipleFour(n):
    return not(n & 3)
票数 3
EN

Stack Overflow用户

发布于 2017-11-30 01:41:54

您可以检查二进制文件,避免将所有整数从0转到n

代码语言:javascript
复制
0 0000
1 0001
2 0010
3 0011
4 0100  8 1000  12 1100

四的倍数的二进制签名是'00'

代码语言:javascript
复制
def x_of_4(n):
    return bin(n)[-2:] == '00'

然而,尽管转换为字符串可以使可视化和理解变得容易,但这并不是最好的想法,而且这个方法对于n = 0失败了。

是一个更好的方法,也是这样做的:按位使用3,它将测试二进制表示的最后两个零( @ShadowRanger在注释中的学分):

代码语言:javascript
复制
def x_of_4(n):
    return not n & 3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47564531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档