• 第二届战神杯线上编程挑战赛月赛第一题:回文数


    题目详情:


    Njzy学习了回文串后联想到了回文数,他希望统计出一个区间内的全部回文数。如今给定一个闭区间[a,b],求这个区间里有多少个回文数。

    比方[20,30],仅仅有一个回文数那就是22.

     


    输入描写叙述:

       输入包括多组測试数据,每组測试数据包括两个整数a,b,

    (0<a<=b<10^6)。

    输出描写叙述:

       对于每组測试数据输出对应的答案。

     



    答题说明:


    输入例子:

    1

    10

    20

    30

    300

    400

    输出例子:

    9

    1

    10


    解题思路:

    total[i]代表从1到i之间有多少回文数,预处理一下,要求a和b之间有多少回文数,直接输出 total[b]-total[a-1] 就能够了。这题第一次提交的时候悲剧了,原因是数组越界

    const int maxn=1000000+10;   int total[maxn] ,后来预处理total数组的时候,从1一直循环到了maxn,越界了,数组下标最大是 maxn-1,哎,悲剧。

    题外话:这个月非常少写博文,正忙着期末考试复习,一定得把成绩提上去。


    代码:

    #include <iostream>
    #include <string.h>
    using namespace std;
    const int maxn=1000000;
    int num[10];
    int total[maxn+10];//total[i]代表从1到i之间有多少回文数
    
    bool pd(int n)//推断是否是回文数
    {
        int k=0;
        int temp=n;
        while(temp)
        {
            num[++k]=temp%10;
            temp/=10;
        }
        for(int i=1;i<=k/2;i++)
        {
            if(num[i]!=num[k-i+1])
                return false;
        }
        return true;
    }
    
    void cal(int n)//预处理total[i]
    {
        int k=0;
        for(int i=1;i<=n;i++)
        {
            if(pd(i))
                k++;
            total[i]=k;
        }
    }
    
    int main()
    {
        total[0]=0;
        cal(maxn);
        int a,b;
        while(cin>>a>>b)
        {
            cout<<total[b]-total[a-1]<<endl;
        }
        return 0;
    }
    

    后来在网上看到别人推断是否是回文数的函数比我的要好:

    例如以下:

    bool pd(int n)//推断是否是回文数
    {
        int temp=n;
        int m=0;
        while(temp)
        {
            m=m*10+temp%10;//m为n的逆序
            temp/=10;
        }
        return n==m;
    }


  • 相关阅读:
    [php]php时间戳当中关于时区的问题
    [jQuery] jQuery如何获取同一个类标签的所有的值
    sed 命令基础
    Docker 学习第6课
    Docker 学习第五课
    Docker 学习第四课
    Docker 学习第三课
    Docker 学习第二课
    Docker学习第一课
    XdeBug的使用
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4044130.html
Copyright © 2020-2023  润新知