昨天晚上临睡前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; } }
这道题让我想到前些天面试时,面试官让用C++实现atoi函数,将一个字符串转化为int型。
函数原型为:int atoi(char* str)
这个可能要考虑的完备性问题更多,欢迎大家讨论,回头再发这个实现。
时间: 2024-10-12 08:20:49