功能是:寻找并输出 11 至 999 之间的数 m,它满足 m,m2 和 m3 均为回文数。
所谓回文数是指其各位数字左右对称的整数,例如 121,676,94249 等。满足上述条件的数如 m=11,m2=121,m3=1331 皆为回文数。
请编制函数 int svalue(long m)实现此功能,如果是回文数,则函数返回 1,反之则返回 0。后把结果输出到文件 out.dat 中。
#include <stdio.h>
int jsValue(long n)
{int i,strl,half; char xy[20];
ltoa(n,xy,10); /注意这里不能使用 itoa()函数,因为 n 是 long 型的/ 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(mm)&&jsValue(mm*m))
{ printf("m=%4ld,mm=%6ld,mmm=%8ld \n",m,mm,mmm);
fprintf(out,"m=%4ld,mm=%6ld,mmm=%8ld \n",m,mm,mmm);
}
}
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,mm= 121,mm*m= 1331
m= 101,mm= 10201,mm*m= 1030301
m= 111,mm= 12321,mm*m= 1367631