PalindromeNum问题
2019-05-08 本文已影响0人
MikeShine
这个问题要我们验证数字是否是回文数字。
如果没有要求的话,这个题目是非常简单的,直接来转成 String/Char,然后按位考察即可。
这里我们看一下,直接用数字操作如何做。
分析
其实还是一样。我们需要获取每一位,依次处理。这里可以每次处理最高位和最低位,然后处理剩下的,依次类推。
思路
问题的关键点是,如何获取最高位、最低位、更新数字。
- 最低位:很简单,直接 %10
- 最高位:如果是1221,直接1221/1000即可。但是这个 1000怎么来。
int div=1;
while(x/div>10) div*=10;
- 更新数字:每次比较完最高位最低位之后,需要去掉最高位和最低位,更新数字。
x = (x%div)/10;
代码
package day_46;
// 题目中要求是,不转换成为 String 或者 Char
public class PalindromeNum {
public boolean isPali(int x){
if(x<0) return false;
int div = 1;
while (x/div >= 10) div*=10; // 先看最高位到多少
while(x>0){
int left = x/div; // 最左边一位
int right = x%10; // 最右边一位
if(left!=right) return false;
x = (x%div)/10;
div /= 100; // 更新最高位
}
return true;
}
public static void main(String args[]){
PalindromeNum p = new PalindromeNum();
System.out.println(p.isPali(1221));
}
}