问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54
思路分析:
- 就在上一题求回文数的基础上判断各位上的数字和是否为n
只需要修改下judge函数,在取数字时每取出一个计算一下当前数字的和,记录在sum变量中。 - 这个函数我没有再用flag做标记了,而是做二次判断。
第一次:
当sum!=n时,直接return false;
第二次:
开始判断是否为回文数时,p[j]!=p[i-j-1]即可return false;
这个函数就完成了。
代码如下:
#include<iostream>
using namespace std;
bool judge(long long x,int n){
int p[9];//将一个数中的数字分别提取出来存入数组
int i=0;
int sum=0;
//将数字都提取出来
while(x){
p[i++]=x%10;
sum+=x%10;
x/=10;
}
if(sum!=n){
return false;
}
//判断是否为回文数,这时的i已经记录了p数组的长度
for(int j=0;j<i/2;j++){
if(p[j]!=p[i-j-1]){
return false;
break;
}
}
}
int main(){
int n;
cin>>n;
for(long long x=10000;x<1000000;x++)
{
if(judge(x,n)){
printf("%d\n",x);
}
}
return 0;
}