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