基础练习 特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
2.主要代码
(1)方法一:
因为要求的是5位或者6位,如果是5位,只需要单独判断前两位,单独判断第三位;后两位用前两位的就行了,再把各位相加判断是否等于n;如果是6位,就判断前三位,后三位用前三位的值,再 判断各位的和是否等于n
import java.util.Scanner;
public class BASIC_9 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n<1||n>54) return;
//int sum=0;
//五位数字 求前面两位 中间遍历0-9
for(int i=10;i<=99;i++){
//求1 2 位
for(int k=0;k<=9;k++){
int n1=i/10;
int n2=i%10;
if(2*(n1+n2)+k==n){
int n4=n2*10;
int n5=n1;
int m=i*1000+k*100+n4+n5;
System.out.println(m);
}
}
}
//接着求六位的
for(int i=100;i<=999;i++){
int n1=i/100;
int n2=(i/10)%10;
int n3=i%10;
if(2*(n1+n2+n3)==n){
int m=i*1000+n3*100+n2*10+n1;
System.out.println(m);
}
}
}
}
(2)方法二:直接for循环(不超时)
import java.util.Scanner;
public class BASIC_9_1 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n<1||n>54) return;
for(int i=10000;i<=99999;i++){
int n1=i/10000;
int n2=i/1000%10;
int n3=i/100%10;
int n4=i/10%10;
int n5=i%10;
if(n1+n2+n3+n4+n5==n && n1==n5 && n2==n4){
System.out.println(i);
}
}
for(int i=100000;i<=999999;i++){
int n1=i/100000;
int n2=i/10000%10;
int n3=i/1000%10;
int n4=i/100%10;
int n5=i/10%10;
int n6=i%10;
if(n1+n2+n3+n4+n5+n6==n && n1==n6 && n2==n5 && n3==n4){
System.out.println(i);
}
}
}
}