回文数
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.【运行结果】
作者:newcode 更多资源请关注纽扣编程微信公众号
从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习