热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

反转32位整数

如何解决《反转32位整数》经验,为你挑选了1个好方法。

我试图解决的exercie leetcode.com与交易signed 32bit integers.

任务是:

返回带符号的32位整数的倒数,如果溢出32位有符号整数的范围则返回0.

在维基百科:

32位寄存器可以存储32个不同的值.可以以32位存储的整数值范围取决于所使用的整数表示.使用两个最常见的表示,范围是0到4,294,967,295(2 ^ 32 - 1)表示为(无符号)二进制数,而-2,147,483,648(-2 ^ 31)到2,147,483,647(2 ^ 31 - 1)表示作为两个补充.

所以,如果我理解的是正确的,我应该在间隔之间进行测试0 to (2^31)-1,(-2^31) to 0否则,返回0.

这是我的代码:

def reverse_int(nums):
    a = str(nums)

    if 0 

这是我的问题:当我在网站上测试我的代码时:

nums = 1534236469 # Fail
nums = 1463847412 # Success
nums = 9000000    # Success

为什么我当前的代码失败1534236469?不在1534236469范围内32 bit signed integers?我错过了什么?



1> void..:

如评论中所述,您必须首先撤消然后检查.然而,这是一种不同的检查方式.

要检查您是否可以&使用适当的掩码获得结果.

所以在你的情况下,限制是?2,147,483,6482,147,483,647它们的十六进制值是-0x800000000x7fffffff

在解释器中试试这个.

>>> 0x7fffffff
2147483647
>>> 2147483647 & 0x7fffffff   #within limit
2147483647

超出限制的值,您可以看到显示的其他一些值.

>>> 2147483648 & 0x7fffffff     #Exceeds limit
0
>>> 98989898989898 & 0x7fffffff  #Exceeds limit
1640235338

但是当价值在限度内时.该值作为输出给出.

>>> 1 & 0x7fffffff               #within limit
1
>>> 780 & 0x7fffffff
780

对于负值

 >>> -0x80000000     #Limit
-2147483648
>>> -2147483648 & -0x80000000
-2147483648

当值在范围内时.该限制是作为输出.

>>> -2147483647 & -0x80000000
-2147483648
>>> -2 & -0x80000000          #within limit
-2147483648
>>> -2323 & -0x80000000
-2147483648

但是,如果值超出范围,您可以看到显示其他一些值.

>>> -2147483649 & -0x80000000
-4294967296
>>> -999999999999 & -0x80000000
-1000727379968

你可以很好地利用这个,并获得你想要的东西!

这是一个完成你想要的程序.

def reverse(x):
    str_x = str(x)
    if x<0:
        str_x = '-'+str_x[::-1][:-1]
        x = int(str_x)
    else:
        str_x = str_x[::-1]
        x = int(str_x)
    neg_limit= -0x80000000
    pos_limit= 0x7fffffff

    if(x<0):
        val=x&neg_limit
        if(val==neg_limit):
            return x
        else:
            return 0
    elif(x==0):
        return x
    else:
        val = x&pos_limit
        if(val==x):
            return x
        else:
            return 0

value = int(input("Enter value: "))
print(reverse(value))

下面的部分只是反转了负值和正值.

if x<0:
    str_x = '-'+str_x[::-1][:-1]
    x = int(str_x)
    print(x)
else:
    str_x = str_x[::-1]
    x = int(str_x)
    print(x)

设置限制 neg_limit= -0x80000000pos_limit= 0x7fffffff根据解释的逻辑检查它们.


是的,但是想提到使用`&`并使用`mask`
或者,以更简单的方式比较`str_x`的反转`int`,如果它在`( - 1 <<31)`和`(1 <<31)-1`之间.如果没有返回&#39;0`.顺便说一句,你的方法也是正确的,但过于冗长.
推荐阅读
author-avatar
手机用户2502856895
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有