特殊回文数(蓝桥杯C++)

55 阅读2分钟

题目

问题描述

  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

输入格式

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

输出格式

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

样例输入

52

样例输出

899998
989989
998899

分析

在看原题时,总体思路是我们给出判断条件让计算机自己去通过一个一个的数字去寻找判断,最终返回出终端上。那么我们先找出回文数的判断条件

1.从左边读和右边读是一样的

2.每位数加起来和要等于n

3.位数限制为五位到六位数

条件1:

从左边到右边读,我们可以通过数组,把输入的数字的每一位放到数组里面,通过循环和判断来进行比较,那么数组的第一位和最后一位应该这样表示:

if( a[j] != a[i-j-1] )  //i为数组的大小,也就是数字的总位数

条件2:

只需要每次在将位数获得到的时候进行一个累加就可以了

条件3:

num 从100000开始判断直到1000000

参考代码

#include<iostream>
using namespace std;

int main()
{
    int n,num=10000,a[6],i,t,s,j;  //思考为什么要把这些变量定义在循环外面
    cin>>n;
    while(num<1000000)
    {
        i=0;
        t=num;
        s=0;
        while(t)        //将每位取出
        {
            a[i]=t%10;
            s=s+a[i++];     //计算每位的总和
            t=t/10;
        }
        if(s==n)
        {
            for(j=0;j<i/2;j++)          //判断是否为回文数
                if(a[j]!=a[i-j-1])
                    break;
            if(j==i/2)
                cout<<num<<endl;
        }
        num++;
    }
}