昨天晚上临睡前A掉的。这道题依然很水。
题目描述:给定一个int数,将各位翻转以后输出。
tip:这道题本身很简单,重要的是如何把情况考虑全面。比如:1、int数翻转以后溢出的问题。2、数的结尾有0,翻转以后如何输出的问题,比如100。
代码:
public class Solution {
final static int max = 2147483647;
final static int testMax = 214748364;
final static int min = -2147483648;
final static int testMin = -214748364;
public int reverse(int x) {
int sum = 0;
boolean flg = false;
if(x<0)
flg = true;
while(x!=0) {
if(!flg) {
if(sum > testMax || (sum==testMax && (x%10)>7))
return 0;
}
else {
if(sum < testMin || (sum==testMin && (x%10)<-8))
return 0;
}
sum*=10;
sum+=(x%10);
x/=10;
}
return sum;
}
}
这道题还有一种解法就是利用数组,代码量略高,但是利于理解。下面贴一下我用数组实现的代码(在我同学基础上改的),比较丑陋,将就看吧。
public class Solution {
public int reverse(int x) {
long sum = 0;
boolean flg = false;
if(x<0)
flg = true; //负数
String str = String.valueOf(x);
char[] strArray = str.toCharArray();
for(int i = (flg?1:0); i < strArray.length; i++) {
sum += (strArray[i]-'0')*Math.pow(10, flg?(i-1):i);
}
if(flg)
sum = -1*sum;
if(sum>=Integer.MIN_VALUE && sum<=Integer.MAX_VALUE)
return (int)sum;
else
return 0;
}
}
函数原型为:int atoi(char* str)
这个可能要考虑的完备性问题更多,欢迎大家讨论,回头再发这个实现。