读书人

回文算法优劣有关问题

发布时间: 2012-03-02 14:40:28 作者: rapoo

回文算法优劣问题
此算法不能通过测试,理由是时间过慢
不知道谁能帮改进下
代码如下
是寻找第N小的回文数字
#include "iostream "
using namespace std;
int hui(int x);
int main()
{int n,y=0,s=1;
cin> > n;
while(y!=n)
{
if(hui(s)==1) y++;
if(y==n) cout < <s;
s++;
}
return 0;
}
int hui(int x)
{
int a[20];
int t=x,q=0,temp;
temp=x;
int i;
for(i=0;(i+1)> 0;i++)
{ a[i]=x%10;
x=x/10;
t=t/10;
if(t==0)break;
}
for(int j=0;j <i+1;j++)
{q=q*10+a[j];
}
if(q==temp)return 1;
else return 0;
}

[解决办法]
这个题目应该有更简单的方法
因为在给定位数的数中,回文数的个数是一定的,可以求出来.

用n表示位数,f(n)表示回文数
n=1,f(n)=9;//不把0 计算在内
n=2,f(n)=9;
n=3,f(n)=90;
n=4,f(n)=90;
n=5,f(n)=900;
n=6,f(n)=900;
.........
n=..., f(n)=9*10^((n-1)/2);

这样任给N,就可以求出是个几位数,并且可以计算这个数是这个数位内的第几个回文数

并把他求出来.

先去吃饭撒,回来在想下.

读书人网 >C++

热点推荐