题目地址:特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54
解:
在一个for循环内进行的话,把五六位数分开判断代码清晰明了,但代码累赘。
代码:
#include"iostream"
#include"cmath"
using namespace std;
int main()
{
int a1,a2,a3,a4,a5,a6,n;//分别五位数只用前四个
cin>>n;
for(int a=10000;a<1000000;a++)
{
if(a<100000)//针对五位
{
a4=a/10000;//万
a3=a/1000-a4*10;//千
a5=a/100-a3*10-a4*100;//百
a2=a/10-a5*10-a3*100-a4*1000;//十
a1=a-a2*10-a5*100-a3*1000-a4*10000;//个
if(a1==a4&&a2==a3&&a1+a2+a3+a4+a5==n)cout<<a<<endl;
}
else//六位
{
a6=a/100000;//十万
a5=a/10000-a6*10;//万
a4=a/1000-a5*10-a6*100;//千
a3=a/100-a4*10-a5*100-a6*1000;//百
a2=a/10-a3*10-a4*100-a5*1000-a6*10000;//十
a1=a-a2*10-a3*100-a4*1000-a5*10000-a6*100000;//个
if(a1==a6&&a2==a5&&a3==a4&&a1+a2+a3+a4+a5+a6==n)cout<<a<<endl;
}
}
return 0;
}