基础练习 特殊回文数
时间限制:1.0s 内存限制:512.0MB
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
思路:
(1)因为有五位和六位两种十进制数,所以可采用上一篇提到的第一种思路来拆分数,同时得到从右读的数,程序如下:
int a = 1234;//从左读的数
int b = 0;//记录从右读的数
while(a)
{
b = a%10 + b*10;
a = a/10;
}
(2)还要求各个数字之和,这个可以在拆分数时,就把拆分得到的数字记录下来。
程序如下:
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int array[6];//用于记录拆分数后得到的各位数字
array[5] = 0;
for(int number = 10000;number < 1000000;number++)
{
int a = number;
int b = 0;//记录从右读的数
for(int i = 0;a > 0;i++)//将数字拆分
{
array[i] = a%10;
b = a%10 + b*10;//得到从右读的数
a = a/10;
}
int sum = 0;//记录各位数字之和
for(int i = 0;i < 6;i++)//得到各个数字之和
{
sum = sum + array[i];
}
if((b == number)&&(n == sum))
{
cout<<number<<endl;
}
}
return 0;
}