123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入一行,包含一个正整数n。
输出格式按从小到大的顺序输出满足条件的整数,每个整数占一行。
特殊回文数在一开始时,我是想的复杂了,想到的是拼接:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n >= 1 && n <= 54) {
for (int i = 10000; i < 1000000; i++) {
String str = "" + i;
char lChar, rChar;
boolean yn = true;
int k = 0;
// 判断是否为回文数
while (yn && (k < str.length() / 2)) {
lChar = str.charAt(k);
rChar = str.charAt(str.length() - 1 - k);
if (lChar == rChar) {
k++;
} else {
yn = false;
}
}
// 计算各个位数之和
int sum = 0;
int m = i;
while (m > 0) {
sum += m % 10;
m = m / 10;
}
if (yn && sum == n) {
System.out.println(i);
}
}
sc.close();
}
}
}
简化代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int ge, shi, bai, qian, wan, shiWan;
for (int i = 10000; i <= 99999; i++) {
ge = i % 10;
shi = i / 10 % 10;
bai = i / 100 % 10;
qian = i / 1000 % 10;
wan = i / 10000 % 10;
if (ge == wan && shi == qian && ge + shi + bai + qian + wan == n) {
System.out.println(i);
}
}
for (int i = 100000; i <= 999999; i++) {
ge = i % 10;
shi = i / 10 % 10;
bai = i / 100 % 10;
qian = i / 1000 % 10;
wan = i / 10000 % 10;
shiWan = i / 100000 % 10;
if (ge == shiWan && shi == wan && bai == qian && ge + shi + bai + qian + wan + shiWan == n) {
System.out.println(i);
}
}
}
}
这里的代码篇幅其实也并没有简化多少,但逻辑清晰了,就专心取数判断就行了。
加油!!!
奥利给!!!



