StarHui


私信TA

用户名:uq_15565483691

访问量:461

签 名:

只要你想,世界就会出现奇迹!

等  级
排  名 363
经  验 4439
参赛次数 2
文章发表 24
年  龄 18
在职情况 学生
学  校 西安汽车职业大学
专  业 人工智能

  自我简介:

大一新生一枚 一起学习交流,请加V:StarHui0415

解题思路:

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

                思路:由于这个范围比较小,可以用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分

4 人评分

  评论区

不愧是交大的,写的真清晰,一看就懂
2022-11-23 19:30:05 | |
  • «
  • 1
  • »