问题描述

123321 是一个非常特殊的数,它从左边读和从右边读是一样的,这类数被称为回文数。

现在给定一个正整数 n,需要编程求出所有满足以下条件的五位和六位十进制数:该数是回文数,且其各位数字之和恰好等于 n。

输入格式

输入一行,包含一个正整数 n。

输出格式

按从小到大的顺序输出所有满足条件的整数,每个整数占一行。

样例输入

52

样例输出

899998
989989
998899

数据规模和约定

1 <= n <= 54。

参考代码

下面是一份 C++ 实现,通过暴力枚举五位数和六位数,判断其是否为回文并累加各位数字之和,命中条件即输出。

#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc, char* argv[])
{
	int n=0;
	//cin>>n;
	n=50;
	for(int i=10000;i<=99999;i++)
	{
		if(i/10000!=i%10)continue;
		if(    (i-i/10000*10000)/1000   !=  (i%100)/10 )continue;
		if((2*(i%10+i%100/10)+  i%1000/100  )==n )
		cout<<i<<endl;
	}
	for(int i=100000;i<=999999;i++)
	{
		if(i/100000!=i%10)continue;
		if(i%100000/10000 !=i%100/10)continue;
		if(i%10000/1000!= i%1000/100)continue;
		if((i%10+i%100/10+i%1000/100)*2==n)
		cout<<i<<endl;
	}

//cout<<"\n     "<<clock()<< " ms";
	return(0);
}