问题描述
123321 是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数 n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。
输入格式
输入一行,包含一个正整数n;
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1 <= n <= 54
思路
- 五位数最小的值为10000,所以可以在这个值开始循环、遍历,并判断该值是否是各个数相加之和等会输入的n值;
- 六位数跟五位数的思路一样,就增多判断、遍历最高位的代码;
代码
package data;
import java.util.Scanner;
public class Data720 {
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
if(n >= 1 && n <= 54)
{
//五位数的情况
for (int x = 10000; x<100000; x++)
{
int a = x/10000;
int b = (x/1000)%10;
int c = (x/100)%10;
int d = (x/10)%10;
int e = x%10;
if(a == e && b == d)
{
int m = a + b + c +d +e;
if(n ==m)
{
System.out.println(x);
}
}
}
//六位数的情况
for(int x = 100000; x<1000000; x++)
{//x = 899998
int a = x/100000; //8
int b = (x/10000)%10; //89%10 = 9
int c = (x/1000)%10; //899%10 = 99
int d = (x/100)%10;//8999 % 10 = 998;
int e = (x/10)%10;
int f = x%10;
if(a == f && b == e && c == d)
{
int m = a + b + c +d +e +f;
if(n ==m)
{
System.out.println(x);
}
}
}
}
}
}