/*问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求: 该数字的各个数位之和等于输入的整数。 输入格式 一个正整数 n (10<n<100), 表示要求满足的数位和。 输出格式 若干行,每行包含一个满足要求的5位或6位整数。 数字按从小到大的顺序排列。 如果没有满足条件的,输出:-1 样例输入 44 样例输出 99899 499994 589985 598895 679976 688886 697796 769967 778877 787787 796697 859958 868868 877778 886688 895598 949949 958859 967769 976679 985589 994499 样例输入 60 样例输出 -1*/ package test; import java.util.Scanner; public class 回文数字 { public static void main(String[] arg){ Scanner input=new Scanner(System.in); int n=input.nextInt(); int num=0; for(int i=10000;i<1000000;i++){//判断在给定范围内的数据是否符合条件 if(is_huiwen(i)){//判断是否为回文数字 if(samen(i)==n){//判断和是否为n System.out.println(i); num++; } } } if(num==0){ System.out.println(-1); } } private static int samen(int i) {//计算该数据的和 // TODO Auto-generated method stub int sum=0; int t; int m=i; for(int j=0;j<2;j++){//计算前两位数的和 t=m%10; sum+=t; m/=10; } if(i<100000){//若数字为5位数 sum*=2; sum+=m%10; }else{//若数字为6位数 sum+=m%10; sum*=2; } return sum; } private static boolean is_huiwen(int k) {//判断改数是否为回文数 // TODO Auto-generated method stub String str=String.valueOf(k); char[] c=str.toCharArray(); for(int i=0,j=str.length()-1;i<str.length();i++,j--){//i表示前半段的数,j表示后半段的数 if(i==j||j<i)//5位数 break; if(c[i]!=c[j])//若前后数字不相同则不是回文数 return false; } return true; } }