当前位置: 首页 > 知识库问答 >
问题:

反向整数leetcode——如何处理溢出

慎望
2023-03-14

问题是:整数的倒数。

示例1:x=123,返回321

例2:x=-123,返回-321

你注意到反整数可能会溢出吗?假设输入是32位整数,则100000003溢出的相反值。你应该如何处理此类案件?

抛出异常?很好,但是如果抛出异常不是一个选项呢?然后必须重新设计函数(即,添加一个额外的参数)。

从我搜索的网站的解决方案是:

public class Solution {

     public static int reverse(int x) {
            int ret = 0;
            boolean zero = false;
            while (!zero) {
                ret = ret * 10 + (x % 10);
                x /= 10;      
                if(x == 0){
                    zero = true;
                }
            }
            return ret;   
        }

    public static void main(String[] args) {
        int s = 1000000003;
        System.out.println(reverse(s));
    }

}

但是,当s=100000003时,控制台会打印-1294967295,而不是300000001。因此,如果我们不能使用异常,这个解决方案仍然不能解决溢出问题。有人帮忙吗?(虽然有一个提示:添加一个额外的参数,但我仍然不知道应该添加什么参数)

共有3个答案

邢博涛
2023-03-14

以下java代码处理溢出情况:

public int reverse(int x) {

    long reverse = 0;
    while( x != 0 ) {
       reverse = reverse * 10 + x % 10;
       x = x/10;
    }

    if(reverse > Integer.MAX_VALUE || reverse < Integer.MIN_VALUE) {
        return 0;
    } else {
        return (int) reverse;
    }
}
廉飞捷
2023-03-14

以上大多数答案都有一个小问题,那就是int变量可能会溢出。您可以尝试以下方法:x=-2147483648作为参数。有一个简单的方法来解决这个问题。将x转换为long,并检查结果是否正确

这是一个java版本。

public int reverse(int x) {
        long k = x;
        boolean isNegtive = false;        
        if(k < 0){
            k = 0 - k;
            isNegtive = true;
        }

        long result = 0;
        while(k != 0){
            result *= 10;
            result += k % 10;
            k /= 10;
        }

        if(result > Integer.MAX_VALUE) return 0;
        return isNegtive  ? 0 - ((int)result) : (int)result;
    }

C版本

    public int Reverse(int x)
    {
        long value = 0;
        bool negative = x < 0;
        long y = x;
        y = Math.Abs(y);

        while (y > 0)
        {
            value *= 10;
            value += y % 10;
            y /= 10;
        }

        if(value > int.MaxValue)
        {
            return int.MaxValue;
        }

        int ret = (int)value;

        if (negative)
        {
            return 0 - ret;
        }
        else
        {
            return ret;
        }
    }

Python版本

def reverse(self, x):                
    isNegative = x < 0
    ret = 0
    x = abs(x)
    while x > 0:
        ret *= 10
        ret += x % 10
        x /= 10
    if ret > 1<<31:
        return 0

    if isNegative:
        return 0 - ret
    else:
        return ret
史和泰
2023-03-14

除了int之外,不需要任何数据类型。只要确保当有一个操作增加一个数字时,反转该操作应该会给出上一个数字。否则,就会出现溢出。

public int reverse(int x) {
    int y = 0;

    while(x != 0) {
        int yy = y*10 + x%10;

        if ((yy - x%10)/10 != y) return 0;
        else y = yy;

        x = x/10;   
    }
    return y;
}
 类似资料:
  • 我在试着解7。反向整数在leetcodehttps://leetcode.com/problems/reverse-integer/. 给定一个有符号的32位整数x,返回x并反转其数字。如果反转x导致值超出有符号32位整数范围[-2^31,2^31-1],则返回0。 例1: 我对上述问题的解决方案是 我弄错了4个测试用例。其中之一是: 示例

  • 我对编码和练习leetcode问题还不熟悉。整数反向问题涉及溢出。 我已经搜索并讨论了关于如何处理溢出的大部分内容。有人能解释一下溢出的原因吗?

  • 尝试了所有方法来通过测试用例,但仍然只显示一个错误。我不知道如何纠正这个错误。 输入:1534236469 实际输出:1056389759 预期输出:0 我不知道为什么我的代码没有给出输出0。

  • 问题内容: Java如何处理整数下溢和上溢? 由此,您将如何检查/测试这种情况的发生? 问题答案: 如果溢出,它将返回最小值并从那里继续。如果下溢,它将返回最大值并从那里继续。 你可以按如下方式事先检查: (可以替代由执行相同的检查) 如果你认为这种情况可能发生的次数更多,那么请考虑使用可以存储较大值(例如long或)的数据类型或对象。最后一个不会溢出,实际上,可用的JVM内存是限制。 如果你碰巧

  • leetcode问题(https://leetcode.com/problems/reverse-integer/description/)请求反转一个整数,这很简单,但是如果有溢出,希望用户返回0。使用long也很简单,因为您可以检查它是否大于整数。java中的MAX_INT或MIN_INT。但如果只允许32位整数,如何实现这一点? 显示了以下解决方案: 我不明白为什么会这样。为什么“反转”操作

  • 我的反向整数代码在LeetCode上不被接受。 我检查了我的程序是否可以返回正确答案。 对于一个输入的情况,我的程序返回正确的输出。 但是有错误,我的代码不被接受。什么是问题,我应该如何修复我当前的代码?