首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

回文算法优劣有关问题

2012-03-02 
回文算法优劣问题此算法不能通过测试,理由是时间过慢不知道谁能帮改进下代码如下是寻找第N小的回文数字#in

回文算法优劣问题
此算法不能通过测试,理由是时间过慢
不知道谁能帮改进下
代码如下
是寻找第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,就可以求出是个几位数,并且可以计算这个数是这个数位内的第几个回文数

并把他求出来.

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

热点排行