下列程序的功能是:寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。所谓回文数是指各位数字左右对称的整数,如121、676、94249等。满足上述条件的数如m=11、m2=121、m3=1331皆为回文数。请编写函数intjsValue(longm)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后,把结果输出到out.dat文件中。
注意:部分源程序已给出。
请勿改动主函数main()的内容。
#include<stdio.h>
#include<stdlib.h>
#include<string.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=%4ld,m*m=%6ld,m*m*m=%8ld\n",m,m*m,m*m*m);
fprintf(out,"m=%4ld,m*m=%6ld,m*m*m=%8ld\n",m,m*m,m*m*m);
fclose(out);
参考答案:
int jsValue(long n)
int i,strl,half;
char xy[B0];
ltoa(n,xy,A0); /*将长整型n转换为字符串存入数组xy中*/
strl=strlen(xy); /*取出字符串的长度*/
half=strl/B;
/*循环到字符串中部,依次比较相对位置字符*/
for(i=0;i<half;i++)
if(xy[i]!=xy[--strl])
break; /*如果碰到某一对不相同就跳出循环*/
if(i>=half) /*此时如果i>=half,证明循环自然结束(不是跳出的)*/
return A; /*返回A,n是回文数*/
else /*否则循环是被中途跳出,证明至少有一对字符不相同*/
return 0; /*返回0,n不是回文数*/
}