问题是:整数的倒数。
示例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
。因此,如果我们不能使用异常,这个解决方案仍然不能解决溢出问题。有人帮忙吗?(虽然有一个提示:添加一个额外的参数,但我仍然不知道应该添加什么参数)
以下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;
}
}
以上大多数答案都有一个小问题,那就是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
除了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上不被接受。 我检查了我的程序是否可以返回正确答案。 对于一个输入的情况,我的程序返回正确的输出。 但是有错误,我的代码不被接受。什么是问题,我应该如何修复我当前的代码?