用C编回文数

来源:百度知道 编辑:UC知道 时间:2024/06/01 06:47:10
请高手讲解一下,这题的两种解法(用***包括的部分,主要是第二种解法)题目及答案如下:
下列程序的功能是:寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编制函数int svalue(long m)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out.dat中。
注意:部分源程序已给出。
请勿改动主函数main()的内容。
#include <stdio.h>
******************************************************************
int jsValue(long n)
{int I,strl,half;
char xy[20];
ltoa(n,xy,10);
strl=strlen(xy);
half=strl/2;
for(I=0;I<half;I++)
if(xy[I]!=xy[--strl]) break;
if(I>=half) return 1;
else return 0;
}
*******************************************************************
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=

第二种解法:k%10读出个位,然后k/=10将十位移动到个位,接着将s的个位移动到十位,在读出个位。。。。总之就是将输入的数反序读出,再判断是否与原数相等。即判断该数是否对称。
不过我记得回文数必须是完全平方数,该调用函数并没有体现。
下面是我以前编的一个求回文数的程序,不过要求有些不同,它能求出3位和5位的回文数。
#include "stdio.h"
void main()
{ long i,j,k,a,b;
for(i=1;i<10;i++)
for(j=0;j<10;j++)
{a=100*i+10*j+i;
b=sqrt(a);
if(a==b*b)
printf("%d\n",a);}
for(i=1;i<10;i++)
for(j=0;j<10;j++)
for(k=0;k<10;k++)
{a=10000*i+1000*j+100*k+10*j+i;
b=sqrt(a);
if(a==b*b)
printf("%ld\n",a);}
}