一、题目
现在要从5位数的十进制数字中找出各个数位之和等于n的回文数字
输入格式:
输入一个整数n
输出格式
输出所有各个数位之和等于n的5位数,数字按从小到大的数序排列
样例输入
33
样例输出
二、解答
通过此次代码联系,我知道了如何找出范围内的回文数字,及逐位输出,更为系统的是,懂得在循环当中,什么需要重置,以免代码出问题!
三、源码及注释
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
int data = 0;
cin >> data;
int s1[10005];
int s2[10005];//存储回文数字
int s3[10005];//存储符合条件的回文数字
int q = 0;//存储回文数字的个数
int q_ = 0;//存储符合条件回文数字的个数
for (int i=10000;i<100000;i++)
{
int n = 0;
int m = i;
while (m!=0)
{
s1[n++] = m % 10;//每次循环之后n要重置!
m /= 10;
}
if (s1[0] == s1[4] && s1[1] == s1[3])
{
s2[q++] = i;//存储所有的回文数字
}
}
//判断回文数字是否符合条件
for (int i=0;i<q;i++)
{
int ret = 0;//同理,每次循环之后ret也要重置
int j = s2[i];
while (j!=0)
{
ret += j % 10;
j /= 10;
}
if (ret == data)
{
s3[q_++] = s2[i];
}
}
for (int i=0;i<q_;i++)
{
cout << s3[i] << ' ';
}
return 0;
}