回文数:设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数。
1.偶数个的数字也有回文数,列如 124421
2.小数没有回文数
第一种方法:把数字转化为字符串,然后利用reverse方法来转置字符串,比较原来的字符串和转置后的字符串,如果相等就返回true,否则返回false。
public static boolean isPalindrome1(int x){
//字符串转置
String str=x+"";
StringBuilder reversedX=(new StringBuilder(str)).reverse();
return str.equals(reversedX.toString());
}
第二种方法:根据回文数的对称性,判断前面一半数是否和后一半数相等。
如果相等就返回true,否则返回false。
public static boolean isPalindrome2(int x){
//回文满足对称性
//将数组转化为字符串 字符串在分割为字符数组
//循环数组 头尾遍历比较
if(x<0){
return false;
}
char[] arr=String.valueOf(x).toCharArray();
int len=arr.length;
for (int i = 0; i < len/2; i++) {
//比较对应位置值,判断对称性
if(arr[i]!=arr[len-i-1]){
return false;
}
}
return true;
}
第三种方法:取出每个位数的值,前面位数的值和后面位数的值相比较,如果相等就返回true,否则返回false。
public static boolean isPalindrome3(int x){
//不转化为字符串 取出每一位的值
//取首位和末位的值比较
if(x<0){
return false;
}
int bit = (int) Math.log10(x);
int div = (int) Math.pow(10, bit);
while (x>0){
//取出首位和末位
int num1=x/div;
int num2=x%10;
if(num1!=num2){
return false;
}
//去除首位和末位 处理除数
x=(x%div)/10;
div/=100;
}
//如果全部对称 到最后 x=0
return true;
}
第四种方法:利用每一个位数,求出原来的值,如果相等就返回true,否则返回false。
public static boolean isPalindrome4(int x) {
if (x < 0) {
return false;
}
int reverse = 0;
int number = x;
while (number != 0) {
int bit = number % 10;
number /= 10;
reverse = reverse * 10;
reverse += bit;
}
return reverse == x;
}
主函数调用:由于是静态方法,所以可以直接调用
public static void main(String[] args) {
boolean b1 = isPalindrome1(11);
boolean b2 = isPalindrome2(121);
boolean b3 = isPalindrome3(12321);
boolean b4 = isPalindrome4(123321);
boolean b5 = isPalindrome1(112);
boolean b6 = isPalindrome2(1212);
boolean b7 = isPalindrome3(123);
boolean b8 = isPalindrome4(12331);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
System.out.println(b5);
System.out.println(b6);
System.out.println(b7);
System.out.println(b8);
}
运行结果:前面四个值都是回文数,后面四个值都不是回文数。