请求指示.这个回文数

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:08:36
小弟只有这6个积分了.
#include <iostream>
using namespace std;
bool lsame(long n);
void main()
{
long i,k;
long num=100;
long *p;
p=new long[num];
for(i=0;i<300;i++)
{
if(lsame(i))
{
cout<<i<<" ";
p[k]=i;
k++;
}
}
cin>>k;
cout<<p[k]<<endl;

}
bool lsame(long n)
{
long lold,lnew=0;
lold=n;
while(n)
{
lnew=lnew*10+n%10;
n/=10;
}
if(lold==lnew)
return true;
else return false;
}
我的目的是,输入一个数字,然后再按顺序的显示对应的回文数/
比如,输入6,将输出第六个回文数6(按1,2.........11,22....的顺序排的)
但是这代码有问题,希望得到指正.

答复楼主:
你的代码中变量k没有初始化,是导致问题的唯一原因。这个错误会使p[k]访问到意想不到的内存位置,这个错误只在运行时才会体现出来。
答复1楼:
对于第1点,绝大多数情况下没有此必要
对于第2点,楼主的写法p[k]=i;并没有错,数组名就是指针,即使要改变一种写法的话,也应该是*(p+k)=i;而不是*(p+i)i;,但相信这是笔误吧。

1、if(lsame(i)) 这里写成(lsame(i))==true),否则有些编译器会产生莫名的错误;
2、p[k]=i; p是指针,不是数组,这样用是不行的。应该*(p+i);