先来看题目:
这道题目有很多优解,因为我想熟悉一下Java的内置方法,所有写得看上去比较累赘,但是思路还是清晰的。
因为题目要求的是回文数,数字之和为n,那么自然而然可以想到用两个方法来判断。
我自己写了两个方法
1.Number:判断是否为回文数,不是则返回1,是则返回该数
2.Sum:在这个方法里调用Number,将是回文数的数的每个数相加,在Main方法里面判断Sum的值是否为输入的值。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int nextInt = sc.nextInt(); //遍历最小五位数到最大六位数的值 for (int i = 10000;i<=999999;i++){ if (Sum(i) != nextInt){ //相加的值不等于输入的值,不执行下一步,跳出循环 continue; } System.out.println(Number(i)); } } //判断是否为回文数,不是返回1 public static Integer Number(int n){ String sb = Integer.toString(n); String a = "1"; int left = 0; int right = sb.length() - 1; while (right > left) { if (sb.charAt(left) != sb.charAt(right)) { a = "1"; break; } else { a = sb; } left++; right--; } return Integer.parseInt(a); } //各个数字相加 public static Integer Sum(int n){ Integer a = Number(n); Integer every= 0; if (a == 1){ return 1; }else { String number = Integer.toString(a); for (int k = 0;k<number.length();k++){ String str = number.substring(k,k+1); Integer sum = Integer.parseInt(str); every+=sum; } } //返回的是每个数字相加的结果 return every; } }