实现回文数字:
eg: 111 121 131 141 151 161
1111 1221 1331 1441 1551 1661 1771 1881
/**
* 功能描述:打印10000以内的回文数字
*
* @author:陈丽强
* @Date:2020/4/30 16:12
*/
@Slf4j
public class Test {
public static void main(String[] args) {
for(int i=10;i<10000;i++){ //10以内的正整数不是回文数,所以从10开始
if(isCircleNumber2(i)){ //判断是否为回文数字
System.out.print(i+" "); //打印回文数字
}
}
}
/**
* 效率高,直接用int型进行比较
* @param num
* @return
*/
private static boolean isCircleNumber(int num) {
int oldNum = num; //原值
int temp = 0; //反值
while(num > 0){ //循环 num 的每一位数值
temp = temp * 10 + num % 10; //得到一位数字
num /= 10; //num减少一位
}
return temp == oldNum; //判断反值与原值是否相等
}
/**
* 效率低,通过StringBuilder的reverse()方法反转数字,与原值比较是否相等。
* @param num
* @return
*/
private static boolean isCircleNumber2(int num){
String oldNum = String.valueOf(num); //原值
StringBuilder sb = new StringBuilder(oldNum); //创建StringBuilder对象
sb.reverse(); //反转
String newNum = sb.toString(); //反转后的数字(字符串)
return oldNum.equals(newNum); //比较两个字符串值是否相等
}
private static boolean isCircleNumber3(int num){
String oldNum = String.valueOf(num);
StringBuffer newEndStr = new StringBuffer(); //重组后的后半部分
String beforeStr = "";
String endStr = ""; //后半部分
if(oldNum.length() % 2 == 0){ //原值字符长度 偶数
endStr = oldNum.substring(oldNum.length()/2);
beforeStr = oldNum.substring(0,oldNum.length()/2);
}else{ //奇数
endStr = oldNum.substring(((oldNum.length()+1)/2));
beforeStr = oldNum.substring(0,((oldNum.length()-1)/2));
}
char[] oldStr = endStr.toCharArray(); //后半部分数字
for(int i = oldStr.length;i>0;i--){
newEndStr.append(oldStr[i-1]);
}
//重组后 判断前半部分雨后半部分是否相等
return beforeStr.equals(newEndStr.toString());
}
}