import java.util.Scanner; public class Text { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //创建一个扫描器 Scanner scanner=new Scanner(System.in); //接收一个整数 while (scanner.hasNext()) { int n=scanner.nextInt(); //创建一个string类型的数据,用来把控制5-7位的i转化为string类型的数据, //在用charAt()方法来把string类型的数据一个个分开 String b; //用来计数 int count=0; //利用i来控制5-7位数 for (int i = 10000; i < 1000000; i++) { //把i转化为string b=String.valueOf(i); //把每一个i的数据看成回文数据; boolean flay=true; //把分割的string类型数据用数据装起来,所以数组的长度就是b的最大长度 int []jie=new int[b.length()]; //定义一个sum数据,用来把数组中的每一个数据相加 int sum=0; //利用for循环,来控制数组的索引和变道charAt()的index for (int j = 0; j < jie.length; j++) { //charAt()方法是返回指定索引的字符,就可以把0 1 2 3 4.....看成一个字符,在利用charAt()把a的数据分割 //char值的0为整数48,1为整数49,2为整数50......所以每一个索引减去48就可以分解成123456789的形式 jie[j]=b.charAt(j)-48; //把数组中的每一个数据相加 sum=sum+jie[j]; } //要是sum一加起来要是和接收的整数相同 if (sum==n) { //要是进来一次,那就相加加一,要是一次没有进来,除非是大于9+9+9+9+9+9 //不然在这么说都会有数小于9+9+9+9+9+9,因为不管是个数位还是十数位还是百数位一致百位数(百位数不加)都在加所有从一到9+9+9+9+9+9都会有 //而大于9+9+9+9+9+9的就不会进入sum==n来,而是直接pass了 count++; //如果是,那么数组的左边和数组的右边要相同,要是右边大于左边,就跳出循环 for (int left=0,right=jie.length-1; right>left;left++,right--) { //判断左边等不等于右边 if (jie[left]!=jie[right]) { //要是不等于,那么i就不是回文数据直接给个false flay=false; //既然这个数是false,那么也没有什么用,就break; break; } } } //要是sum一加起来要是和接收的整数不相同 else { //那么i就直接给个false flay=false; } //如果i满足sum=n,并且还是回文数字,那么他就是满足的,啥也不用给,因为上面我把所有数子都看成回文数子了 if (flay==true) { //最后输出 System.out.println(i); } } if (count==0) { System.out.println("-1"); } } } }
解题思路:回文数子都是等式左边等于右边的数子,所以要判定每一个数字,然后分解成个位数,然后在弄进数组理。然后在看看左边和右边是不是相等,要是相等就返回数字,要不是没有一个相等的就返回-1;
注意事项: 我这个是假设法,就是每一个数都判定是对的,然后来证明他是对的,要是对的就输出不是对的就返回-1
参考代码:
0.0分
2 人评分