首页 > 代码库 > 蓝桥杯 - 特殊回文数

蓝桥杯 - 特殊回文数

特殊回文数  
时间限制:1.0s   内存限制:512.0MB
      
问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。

和之前那个一样。。


AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn = 2000;
int palin[maxn], num = 0;

int is_palin(int n)    //判断是否是回文数 
{
	if(n<100000)
	{
		if( (n/10000 == n%10) && (n/1000%10 == n/10%10) )
			return 1;
	}
	else
	{
		if((n/100000 == n%10) && (n/10000%10 == n/10%10) && (n/1000%10 == n/100%10))
			return 1;
	}
	return 0;
}

void init()     //回文数打表 
{
	for(int i=10000; i<=999999; i++)
	{
		if(is_palin(i)) palin[num++] = i;
	} 
}

int fun(int n)     //判断是否符合条件 
{
	int t = 0, m = n;
	while(m)
	{
		t += m%10;
		m /= 10;
	}
	return t;
}

int main()
{
	init();
	int n;
	while(scanf("%d", &n) != EOF)
	{
		for(int i=0; i<num; i++)
		{
			if(fun(palin[i]) == n) printf("%d\n", palin[i]);
		}
	}
	return 0;
} 



蓝桥杯 - 特殊回文数