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

求指教回文数的问题

linkui0801 发布于 2013-01-02 10:22, 396 次点击
题目描述
 正向和反向读其值相等的整数称为回文数。编写一个程序,输入整数m和n(10<m<n<32000),求出从m到n之间(包括m,n)的所有回文数,并按照每行5个的形式输出。

输入格式
 整数m,n(10<m<n<32000)

输出格式
 [m,n]上的所有回文数
4 回复
#2
liqingqinger2013-01-03 14:13
回复 楼主 linkui0801
亲  这个需要分离 再来判断 可以用函数 然后 你在想想吧
#3
不玩虚的2013-01-05 00:05
有思路了,,先写一个判断一个素是部是回文数的涵数。求一个数有多少位,当然每位数是多少也的求。求出没位数,放数组。先在就开始判断了。有个笨方法,第一个和最后一个比较,第二个和倒数第二个比较,一直到数组最中间。每次比较都成立,写个数就是回文数了。最后求【m,n】循环调用涵数判断就行,至于输出格式,数出是计下数,没输出5个,就输出个换行就行。
#4
不玩虚的2013-01-05 00:39
有思路了,,先写一个判断一个素是部是回文数的涵数。求一个数有多少位,当然每位数是多少也的求。求出没位数,放数组。先在就开始判断了。有个笨方法,第一个和最后一个比较,第二个和倒数第二个比较,一直到数组最中间。每次比较都成立,写个数就是回文数了。最后求【m,n】循环调用涵数判断就行,至于输出格式,数出是计下数,没输出5个,就输出个换行就行。
#5
不玩虚的2013-01-05 13:24
#include <iostream>
#include <iomanip>
using namespace std;
int Weishu(int n)//求整数n有多少位
{    int s,i=0;
    do
    { s=n%10;
        n=n/10;
        i++;
    }while(n);
    return (i);
}
void Meiweishu(int n,int *a)//求的是整数n每位数,如n=456,a[0]=6,a[1]=5,a[2]=4
{    int i=0;
    a[i]=0;
    do
    { a[i]=n%10;
        n=n/10;
        i++;
    }while(n);
   

}
void nihuan(int b,int *a,int *c)//是将a数组的元素,逆换下,如a[0]=6,a[1]=5,a[2]=4,换成,c[0]=4,c[1]=5 ,c[2]=6
{for(int k=0;k<b;k++)
        {c[k]=a[b-k-1];
        }
}
bool panduan(int b,int *c)//判断这个b位整数n,是不是回文数,是返回true,不是返回false。如45677,五位数,只需要判断4=4,5=7,6=6,是否成立都成立就是回文数循环次数=b/2=2,数数组是从0开始的
{    if(b==1)
        return true;
    for(int k=0;k<b/2;k++)
    {    if(c[k]==c[b-k-1])
            return true ;
        else return false;
    }
}
int main()
{    int *a,*c,i=0,n,b,s=0,m;
    cout<<"请输入m,n:"<<endl;
    cin>>m>>n;

    for(i=m;i<=n;i++)
        {
            b=Weishu(i);
        a=new int [b];
        c=new int [b];
        Meiweishu(i,a);
            nihuan(b,a,c);
    if(panduan(b,c)==true)
    {    cout<<setw(4)<<i<<setw(4);//若n大于1000,请把setw(4)的4写大点,不然后面的数都是连在一起了
    s++;
    if(s%5==0)
        cout<<endl;
    }
        }
        cout<<endl;
    return 0;
}//写的很菜,楼主参考,有好的方法说下,同讨论下,同学习同进步
1