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

反向整数Leetcode-解释溢出问题[重复]

宋嘉禧
2023-03-14

我对编码和练习leetcode问题还不熟悉。整数反向问题涉及溢出。

我已经搜索并讨论了关于如何处理溢出的大部分内容。有人能解释一下溢出的原因吗?

共有1个答案

许寒
2023-03-14

整数。最大值2147483647
如果将其反转,则会得到7463847412

该值显然超出了int支持的范围
如果你反向计算,你会得到无声溢出。

int rev = 0;
for (int val = Integer.MAX_VALUE; val != 0; val /= 10)
    rev = rev * 10 + val % 10;
System.out.println(rev); // prints: -1126087180   <== Result of overflow

如果您解析反向字符串,您将得到解析异常。

String revStr = new StringBuilder().append(Integer.MAX_VALUE).reverse().toString();
System.out.println(revStr); // prints: 7463847412
rev = Integer.parseInt(revStr); // throws: NumberFormatException: For input string: "7463847412"

您还可以使用MathxxxExact方法来防止溢出:

int rev = 0;
for (int val = Integer.MAX_VALUE; val != 0; val /= 10)
    rev = Math.addExact(Math.multiplyExact(rev, 10), val % 10); // throws: ArithmeticException: integer overflow

 类似资料:
  • 问题是:整数的倒数。 示例1:x=123,返回321 例2:x=-123,返回-321 你注意到反整数可能会溢出吗?假设输入是32位整数,则100000003溢出的相反值。你应该如何处理此类案件? 抛出异常?很好,但是如果抛出异常不是一个选项呢?然后必须重新设计函数(即,添加一个额外的参数)。 从我搜索的网站的解决方案是: 但是,当时,控制台会打印,而不是。因此,如果我们不能使用异常,这个解决方案

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

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

  • 这是LeetCode中的Pascal三角形编码问题,它要求输出Pascal三角形的第n行。使用,输出如下所示: 显然存在溢出问题。现在为了解决这个问题,我修改了行< code > result . push _ back(result[I-1]*(rowIndex 1-I)/I);到< code > result . push _ back((double)result[I-1]*(double)

  • 虚拟机安装:Ubuntu 12.04(x86) 什么是整数溢出? 存储大于最大支持值的值称为整数溢出。整数溢出本身不会导致任意代码执行,但整数溢出可能会导致堆栈溢出或堆溢出,这可能导致任意代码执行。在这篇文章中,我将仅谈论整数溢出导致堆栈溢出,整数溢出导致堆溢出将在后面的单独的帖子中讨论。 数据类型大小及范围: 当我们试图存储一个大于最大支持值的值时,我们的值会被包装 。例如,当我们尝试将存储到带

  • 对于下面的输入,我得到一个StackOverflow错误。你们能帮我解释一下吗,以及如何在我的代码中解决这个问题。