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