086题 下列程序的功能是:寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编制函数int jsValue(long m)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out.dat中。
部分源程序已给出。
  请勿改动主函数main()的内容。
#include <stdio.h>

int jsValue(long n)
{

}

main()
{
long m;
FILE *out;

out=fopen(\ out.dat\ ,\ w\ );
for(m=11;m<1000;m++){
if(jsValue(m)&&jsValue(m*m)&&jsValue(m*m*m)){
printf(\ m=%41d,m*m=%61d,m*m*m=%81d\\n\ ,m,m*m,m*m*m);
}
}
fclose(out);
}


int jsvalue(long n)
{ int i,strl,half;
char xy[20];
itoa(n,xy,10);
strl=strlen(xy);
half=strl/2;
for(i=0;i if(xy[i]!=xy[--strl]) break;
if(i>=half) return 1;
else return 0;
}

 

_________________________________

本人只是为了上机能通过,不追求什么算法速度,答案仅供大家参考.

int jsValue(long n)
{
int i,aa[10],j=0,b=1;  /*n为“long”型,n的三次方最多达到10位,所以定义为aa[10]*/
while(n)
{
aa[j++]=n%10;     /*将数拆散后依次按最高位到最低位(万-》千-》百-》十-》个位)的次序放入数组aa中*/
n=n/10;
}
for(i=0;i<j/2;i++)
{
if(aa[i]!=aa[j-i-1]) b=0;
}
return b;
}

返回南开百题目录

www.163164.cn 联系QQ:3149886