回文数

1.【问题】

【问题描述】
输入一个正整数 n,求 1~n 之间“回文数”的个数。回文数是指一个数倒过来和原数一样,如 12121、11、1221、1 是回文数,而 1231 不是回文数。
【输入格式】
一行一个正整数 n,1≤n≤10000。
【输出格式】
一行一个正整数,表示 1~n 之间回文数的个数。
【输入样例】
12
【输出样例】
10

 

2.【问题分析】

  此问题可以分解成两个子问题

  1.求一个数是否为回文数,由于多次判断使用,可以封装为一个函数

   1).定义一个变量,存储计算出的回文数,int ret=0

   2).根据10进制特征,截取一个整数的最后一位 比如:12345需要获取最后一位5,可使用12345%10

   3).根据10进制特征,循环计算等出对应的回文数,ret=ret*10+i%10;

   4).计算完当前位后,把当前位去掉,i=i/10

   5)上述1-4是计算每一位翻转数字,需要循环处理没一位

  2.定义一个计数器整形变量,循环1-n,分别判断是否为回文数,如果是就累加,否则不处理

3.【程序及备注】

//p6 -1-2
#include<cstdio>
using namespace std;
// 在此自定义一个函数 check(),如果 i 是回文数返回 true,否则返回 false
bool check(int a)
{
    int i=a;
    int ret=0;
    while(i>0)//i/10 如果除到就一位,则为0,退出 
    {
        ret=ret*10+i%10;
        i=i/10;
    }
    return ret==a;//算出的翻转数和计算前的数相等返回true,否则返回false 
}
int main(){
    int a,i,cout = 0; 
    scanf( "%d" ,&a);
    for(i = 1; i <= a; i++)
       if(check(i)) cout++;//是回文数就累加 
    printf("%d\n",cout);
    return 0;
}

4.【运行结果】

posted @ 2019-11-11 15:36  new-code  阅读(1659)  评论(0)    收藏  举报