问题是:
反转整数的数字。
示例1:x = 123,返回321
示例2:x = -123,返回-321
您是否注意到反转的整数可能会溢出?假设输入是32位整数,那么1000000003的逆序就会溢出。遇到此类情况应该如何处理?
抛出异常?很好,但是如果不能抛出异常怎么办?然后您将不得不重新设计该函数(即添加额外的参数)。
我搜索到的网站的解决方案是:
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 = 1000000003
,控制台打印-1294967295
代替3000000001
。所以如果我们不能使用异常的话,这个解决方案仍然不能解决溢出问题。这里有什么帮助吗?(虽然有提示:添加一个额外的参数,但我仍然不知道应该添加什么参数)
除了 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)