【問題描述】所謂“回文數”是指具有如下性質的整數:一個整數,當它的各位數字逆序排列,形成的整數與原整數相同,這樣的數稱為回文數。例如,素數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; }
