解题思路:

                题前小叙:同样的,我被一处小失误,改了半个多小时的代码,就在回文数字判断那边失误的,竟然直接在参数上进行操作!!!切记需要和参数进行判断时,不能在参数上进行其他操作!!!

                思路:由于这个范围比较小,可以用int存储,就没有使用字符串进行回文判断,而是直接在数字上进行操作的。这一题就是需要满足两个条件:1、回文数字  2、一个数的每位数字的和等于输入的数字;就是那么简单,只需要写一个回文判断函数,加一个判断每位数字的和是否与输入的数相等即可,接下来写一下具体步骤。

                步骤:  1、使用for循环遍历10000-999999之间的数字

                            2、判断是否为回文数字(本题解采用的做法是,把每一位数字进行反转,判断是否相等)

                            3、判断一个数的每一位数字是否等于输入的数字

注意事项:
                    1、可以通过一些细节优化时间复杂度,比如可以被10整除的一定不是回文数(由于本题没有涉及到负数,就没有写判断负数)

                    2、进行回文数判断时,一定不能对原参数进行判断,要拷贝一份再进行操作,以防改变原参数的值,导致判断出错

                    3、
参考代码:

#include using namespace std;

bool isPalindrome(int x)//回文数判断
{
    int copyx = x,reverse_x = 0;//拷贝一份x,避免对参数直接进行操作
    while(copyx != 0)//利用while循环,是整个数字反转,其实还可以优化,不必反转整个数字,反转一半就行
    {
        reverse_x = reverse_x * 10 + copyx % 10;
        copyx /= 10;
    }
    return x == reverse_x;
}
bool isequal(int x,int target)//判断数字的每一位数的和是否等于输入的数字
{
    int sum = 0;
    while(x)//得到每一位数的和
    {
        sum += x % 10;
        x /= 10;
    }
    return sum == target;
}
int main()
{
    int x,flag = 0;//定义一个旗帜,判断这个范围里面有没有符号条件的数
    cin >> x;
    for(int i = 10000;i <= 999999;i++)
    {
        if(i % 10 != 0 && isPalindrome(i)&& isequal(i,x))//加上i % 10 != 0是为了优化时间复杂度,同时判断每一位数的和是否等于参数
        {
           cout << i << endl;
           flag = 1;
        }
    }
    if(flag == 0)//如果没有,返回-1
        cout << "-1" << endl;
    return 0;
}
点赞(0)
 

0.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

jharden13 2年前 回复TA
不愧是交大的,写的真清晰,一看就懂