下列程序的功能是:寻找并输出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=%4ld,m*m=%6ld,m*m*m=%8ld \n",m,m*m,m*m*m);
}
}
fclose(out);
system("pause");
}
或者下面的解法:
int jsValue(long n)
{long int s=0,k;
k=n;
while(k)
{ s=s*10+k%10;
k/=10;
}
if(s==n) return 1;
if(s!=n) return 0;
}
输出结果为:
m= 11,m*m= 121,m*m*m= 1331
m= 101,m*m= 10201,m*m*m= 1030301
m= 111,m*m= 12321,m*m*m= 1367631
问题:
1.解法一,解法二都没看懂,还有就是解法一中的函数“ltoa(n,xy,10);”
2.在自定义的函数int jsValue(long n)里这中解法二的while语句把我整蒙了,由于处学它这么写和课本上的差异也太大了点。看不懂是咋回事,能不能给解释的详细点,快考试了,急
3.两个自定义的函数解法一个也没看懂,能不能给一步一步的解释一下,谢谢了
4.能不能给说以下这个题的解题思想,再就是给看一下解法二,也讲讲解法二的解题思想
四季花海
相关分类