资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
解题思路1
对1000~9999中的所有数进行遍历,将数的首尾进行比较。不是回文数时,进入下一个数的判断;是回文数时,则输出回文数。
回文数的比较:是将整数i转化成字符数组,然后进行比较。
代码
方法一:
public class Main {
public static void main(String[] args) {
for(int i = 1000;i < 10000;i++) {
int sum = 0;
String str = Integer.toString(i); //将整数转化成字符数组
char[] ch = str.toCharArray();
int len = ch.length;
boolean flag = true; //判断是否回文的标志
for (int k = 0, l = len - 1; k < len / 2; k++, l--) { //判断是否是回文数
if (ch[k] != ch[l]) {
flag = false;
break;
}
}
if (flag) { //如果是回文数,则输出i
for (int j = 0; j < ch.length; j++) {
sum += (Integer.valueOf(ch[j]) - 48)*Math.pow(10,j);
}
System.out.println(sum);
}
}
}
}
方法二、
改进输出i的地方
public class Main{
public static void main(String[] args) {
for(int i = 1000;i < 10000;i++) {
int sum = 0;
String str = Integer.toString(i);
char[] ch = str.toCharArray();
int len = ch.length;
boolean flag = true; //判断是否回文的标志
for (int k = 0, l = len - 1; k < len / 2; k++, l--) {
if (ch[k] != ch[l]) {
flag = false;
break;
}
}
if (flag) {
System.out.println(i);
}
}
}
}
结果:
解题思路2
对1000~9999中的所有回文数而言,都可以用公式a*1000+b*100+b*10+a;因此只需要对a和b的取值进行范围限制即可。使用两个for循环进行嵌套。
代码:
public class Main {
public static void main(String[] args) {
for(int i = 1;i < 10;i++) {
for (int j = 0; j < 10; j++) {
System.out.println((int)(i*Math.pow(10,3)+i+j * Math.pow(10,2)+j*Math.pow(10,1)));
}
}
}
}