菜鸟求助奇数位数回文数生成的问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 09:19:57
#include<stdio.h>
#include<stdilb.h>
#include<math.h>
int HUIWEN(int t[])
{
int t,n,i,e,m,j,converse;
converse=0;
for(e=0,j=0;e<5;e+2,j++)
{
for(n=pow(10,e);n<=(pow(10,e+1)-1);n++)/*在10的e次方和10的e+1次方-1之间列举*/
{
for(i=n;i>=10;)/*用converse记录除n最高位之外的镜反数;再用converse*pow(10,e+1)+n生成回文数*/
{
m=i%10;
i/=10;
converse=m+converse*10;
}
t[j]=converse*pow(10,e+1)+n;
}
}
for(e=0;e<=j;e++){printf("%d\n",t[e]);}
}
为什么最后的输出只有个位数而且是死循环?
韩度无人耶?
没人能帮忙?

int t,n,i,e,m,j,converse中,t重复定义
for(e=0,j=0;e<5;e+2,j++)这句中,e+2错误,正确写法为e+=2
这个for循环进行三次循环,j只有三个值:0,1和2
也就是数组t[]只使用了t[0]、t[1]和t[2]
实际上,e的步长不必为2,应为1,按你的算法,n无法被赋值为2,4,6……位数,但n为2,4,6……位数时,同样可以得到奇数位数的回文数,比如12,去掉最高位后为2,pow后加回n得到212
t[j]=converse*pow(10,e+1)+n;后没有使converse变回0

还有一点,生成的回文数数量很惊人的,你打算分配多少内存给t[] ???
并且t[]是一个整型数组,不够存放那么大的数(当n为4时,得到的是九位的数)

重新写过一个,你试试看:
#include<stdio.h>
#include<math.h>

void main()
{
int m, p ;
long e, t, i, converse ;
for(e=11; e<100000; e++)
{
if (e%10 == 0)
{
continue ; // 末位为零则跳过
}

converse = 0 ;
p=0 ;

for(i=e ; i>=10 ; )
{
m = i%10 ;
i /= 10 ;
converse = m+converse*10 ;
p++ ;
}
t = (long)(converse*pow(10,p+1)+e) ;

printf("%ld \n", t) ;
}
}