注册 登录
编程论坛 C++教室

回文数

tredy6t 发布于 2016-01-03 00:20, 2044 次点击
程序代码:
#include<stdio.h>
#include <conio.h>
#include<string.h>
int main()
{
    unsigned int i,j,k,n=0;
    char s[81];
    memset(s,'\0',81);
    for(i=100;i<65530;i++)
    {
        j=0;
        while(i)
        {
            s[j]=i%10;
            j++;
            i/=10;
        }
        for(k=0;k<=j;k++)
            if(s[k]!=s[j-k])
                break;
            if(k==j+1)
            {
                printf("%d ",i);
                n++;
                if(!(n%10))
                    putchar('\n');
            }
            memset(s,'\0',81);
    }
    getch();
    return 0;
}

咋不出结果
6 回复
#2
tredy6t2016-01-03 00:49
出来了
程序代码:
#include<stdio.h>
#include <conio.h>
#include<string.h>
int main()
{
    unsigned int i,j,k,n=0,temp;
    char s[81];
    memset(s,'\0',81);
    for(i=100;i<1000;i++)
    {
        j=0;
        temp=i;
        while(temp)
        {
            s[j]=temp%10;
            j++;
            temp/=10;
        }
        for(k=0;k<j;k++)
            if(s[k]!=s[j-1-k])
                break;
            if(k==j)
            {
                printf("%d ",i);
                n++;
                if(!(n%10))
                    putchar('\n');
            }
            memset(s,'\0',81);
    }
    getch();
    return 0;
}
#3
rjsp2016-01-04 08:52
提问时,要先将要求说清楚,比如“求3位数中的回文数,例如121、999,每十个数一行

程序代码:
#include <stdio.h>

int main( void )
{
    for( unsigned i=10; i!=100; ++i )
        printf( "%u%u%c", i, i/10, " \n"[(i+1)%10==0] );

    return 0;
}
就这么简单,没什么好说的
#4
eFun2016-01-04 12:25
回复 3楼 rjsp
不能通用于大于1000的数据。
#5
rjsp2016-01-04 13:38
以下是引用eFun在2016-1-4 12:25:24的发言:

不能通用于大于1000的数据。
题目要求大于1000吗?我看他的代码中是  for(i=100;i<1000;i++)

代码仍然是通用的,比如4位数
程序代码:
#include <stdio.h>

int main( void )
{
    for( unsigned i=10; i!=100; ++i )
        printf( "%u%02u%c", i, i%10*10+i/10, " \n"[(i+1)%10==0] );

    return 0;
}



#6
rjsp2016-01-04 14:43
回复 4楼 eFun
估计你要的是这个:
程序代码:
#include <stdio.h>
#include <assert.h>

int main( void )
{
    const unsigned digital = 6;

    assert( digital != 0 ); // 位数不可以为0

   
// 计算开始数,也就是 10的(digital-1)/2次方
    unsigned first = 1;
    for( unsigned i=0; i!=(digital-1)/2; ++i )
    {
        assert( first*10/10 == first ); // 确保数值不溢出
        first *= 10;
    }

    for( unsigned i=first; i!=first*10; ++i )
    {
        if( digital == 1 ) // 1位数没有镜像
            printf( "%u%c", i, " \n"[(i+1)%10==0] );
        else
        {
            // 求i前digital/2位的镜像
            unsigned mirror = 0;
            for( unsigned j=digital%2==1?i/10:i; j!=0; j/=10 )
                mirror = mirror*10 + j%10;   

            printf( "%u%0*u%c", i, digital/2 ,mirror, " \n"[(i+1)%10==0] );
        }
    }

    return 0;
}

#7
南庭2016-01-05 14:49
回复 2楼 tredy6t
" \n"[(i+1)%10==0] 这个是什么语法能否给讲讲呢,第一次见,不甚感谢!
1