自己写的解,转化为字符串再反转,比较笨。
import java.util.Scanner;
public class Result01 {
public static void main(String[] args) {
System.out.println("请输入整数,我来帮您判断是否是回文数。");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
ifNumber(num);
}
public static boolean ifNumber(int a){
//负数不可能是回文数
if (a<0){
System.out.println(a+"不是回文数。");
return false;
}else if (a==0||a<10){//0,1,2,..个位数都是回文数
System.out.println(a+"是回文数。");
return true;
}else {
//将int转化为字符串
String str = Integer.toString(a);
//使用StringBuffer容器的append()添加方法、reverse()反转方法
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(str);
//String.valueOf将StringBuffer转化为String 存入 反转后的字符串 reverseStr 中
String reverseStr = String.valueOf(stringBuffer.reverse());
if (str.equals(reverseStr)){
System.out.println(a+"是回文数。");
return true;
}else {
System.out.println(a+"不是是回文数。");
return false;
}
}
}
}
官方给的解比较巧妙。
public class Result02 {
public static void main(String[] args) {
System.out.println("请输入您要判断的数据:");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
boolean ifNum = ifNumber(a);
if (ifNum==true){
System.out.println(a+"是回文数。");
}else {
System.out.println(a+"不是回文数");
}
}
public static boolean ifNumber(int a){
//负数不可能是回文数; 除了0以外,其余个位为0的数也都不是回文数,因为首位不可能是0。
if (a<0||(a%10==0&&a!=0)){
return false;
}
//循环建立反转一半的数字
int revertedNumber = 0;
while(a > revertedNumber){
revertedNumber = revertedNumber * 10 +a % 10;
a /= 10;
}
//针对奇数位和偶数位的数字,分别判断是否为回文。
return a == revertedNumber || a == revertedNumber/10;
}
}
//算法复杂度——————时间O(log10(N))、空间O(1)