【问题描述】所谓“回文数”是指具有如下性质的整数:一个整数,当它的各位数字逆序排列,形成的整数与原整数相同,这样的数称为回文数。例如,素数11,373,其各位数字对换位置后仍然为11,373,因此这两个整数均为回文数。编写函数int loop(int x),判断一个整数是否为回文数,如果x是回文数则返回1,否则返回0。编写程序loop.c,接收控制台输入的两个整数a,b。调用loop函数输出a到b之间(包括a和b)的所有回文数
【输入形式】控制台输入两个整数a和b(必有a<b),以空格分隔。
【输出形式】输出有若干行,每行有一个a和b之间的回文数。输出各行上的数字不重复,且从小至大依次按序输出。
【样例输入】3 120
【样例输出】
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
101
111
【样例说明】输入整数a=3,b=120,要求输出所有[3, 120]之间的回文数。按升序分行输出所有符合题意的整数。
---------------------------
个人代码:
#include <stdio.h> int getrnum(int num){ int rnum = 0; do{ rnum *= 10; rnum = rnum + num%10; }while((num/=10)!=0); return rnum; } int loop(int x){ if(x==getrnum(x)) return 1; else return 0; } int main(){ int a,b,i,flag; scanf("%d %d",&a,&b); for(i=a;i<=b;i++){ flag = loop(i); if(flag==1){ printf("%d\n",i); flag = 0; } } getchar(); return 0; }
标答:
#include <stdio.h> #include <stdlib.h> #include <math.h> int loop(int x); main() { int i,upper,lower; scanf("%d %d",&lower,&upper); for(i=lower;i<=upper;i++){ if( loop(i)==1){ printf("%d\n",i); } } return 0; /*what is speed */ } int loop(int x) { int i = 0, t = x; char s[16]; do { s[i++] = x % 10 + '0'; /*see the itoa function in page 63 ^_^*/ } while ((x /= 10) > 0); s[i]='\0'; x = atoi( s ); return x == t; }