【leetcode】颠倒整数(C、Python解答)

本文详细解析了如何在不使用longlong类型的情况下,实现32位有符号整数的数字反转,避免溢出问题。通过边翻转边检测的方法,确保结果的有效性。提供了C语言和Python两种实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

 

题目分析:

C语言中:

int类型在C语言中占4个字节,即32个二进制位。C语言中int的取值范围为:-2147483648 ~ 2147483647

如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。

所以,我一开始的想法是定义一个long long型数据来存储翻转后的数据,这样就不会溢出。

但参考网上的一些代码后,我发现并不需要这样做,这里就涉及到了一个非常重要的技巧:边翻转边检测,一旦超出INT_MAX停止后续翻转,并返回0。这样做的好处是:1.减少了一些不必要的无意义的计算。2.免于定义long long类型数据

数字的翻转还用到了常用的数字从低位到高位的分离算法。

C解答:

int reverse(int x) {
    int res=0;
    while(x!=0){
        if(abs(res)>INT_MAX/10) return 0;
        res=res*10+x%10;
        x /= 10;
    } 
    return res;
}

 

Python中:

注意Python中的int的范围:

2.7:
32位:-2^31~2^31-1 64位:-2^63~2^63-1
3.5:
在3.5中int长度理论上是无限的

此外:

在python中:

/是精确除法,//是向下取整除法,%是求模

%求模是基于向下取整除法规则的

C中:

/是向零取整除法

%是向零取整求模

 

什么是向下取整?

看看下面python运算示例就明白了:

 

 

基于上面两点,我们可以按照C解答中算法写出如下代码:

Python解答:

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        res=0
        signal=0
        if x<0:
            x=-x
            signal=1
        while x!=0:
            if res>(pow(2,31)/10):
                return 0
            res=res*10+x%10
            x=x//10
        if signal==1:
            return -res
        else:
            return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值