★☆題目25 (回文數(shù)問題)
下列程序的功能是:尋找并輸出11至999之間的數(shù)m,它滿足m,m2和m3均為回文數(shù)。所謂回文數(shù)是指其各位數(shù)字左右對稱的整數(shù),例如121,676,94249等。滿足上述條件的數(shù)如m=11,m2=121,m3=1331皆為回文數(shù)。請編制函數(shù)int svalue(long m)實現(xiàn)此功能,如果是回文數(shù),則函數(shù)返回1,反之則返回0。最后把結(jié)果輸出到文件out.dat中。
注意:部分源程序已給出。
請勿改動主函數(shù)main()的內(nèi)容。
#include
int jsValue(long n)
{int i,strl,half;
char xy[20];
ltoa(n,xy,10); /*注意這里不能使用itoa()函數(shù),因為n是long 型的*/
strl=strlen(xy);
half=strl/2;
for(i=0;iif(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;
}
輸出結(jié)果為:
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