浏览 1767 次
锁定老帖子 主题:java-判断一个整数是否回文,考虑溢出
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-01-15
public class PalindromeInt { /** * PalindromeInt,like 1,121,12321.... * you should consider the possibility that the reversed number might overflow * eg. 1...................9,after reversing,9 comes to first,and...you know that. * */ public static void main(String[] args) { int[] a={12321,17770}; PalindromeInt pi=new PalindromeInt(); boolean re=pi.isPalindromeInt2(a[0]); System.out.println(re); re=pi.isPalindromeInt2(a[1]); System.out.println(re); } //generic solution public boolean isPalindromeInt(int x){ if(x<0)return false; int x2=x; int y=0; while(x>0){ y*=10; y+=x%10; x/=10; } return x2==y; } //better solution //avoid overflow public boolean isPalindromeInt2(int x){ if(x<0)return false; boolean re=true; int div=1; while(x/div>=10){ div*=10; } while(x>0){ int h=x/div;//head int t=x%10;//tail if(h!=t){ re=false; break; } x=(x%div)/10;//now x is 232 instead of 12321 div/=100;//accordingly,div should be 100 instead of 10000 } return re; } /* c/c++? I don't know how it works * invoke like that: isPalindrome(x, x) boolean isPalindrome(int x,int &y){ if (x < 0) return false; if (x == 0) return true; if (isPalindrome(x/10, y) && (x%10 == y%10)) { y /= 10; return true; } else { return false; } } */ } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |