2006年9月全國等級考試三級c語言上機題庫(二十五)

★☆題目25 (迴文數問題)

 

下列程式的功能是:尋找並輸出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); /*注意這裡不能使用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(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