c0305_求兩正整數a、b之間所有回文數


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM