下列程序的功能是;寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编制函数int jsvalu

admin2009-02-15  24

问题 下列程序的功能是;寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编制函数int jsvalue(long n)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out43.dat中。
   注意:部分源程序已给出。
   请勿改动主函数main()。
   试题程序:
     #include<stdio.h>
     int jsValue(long n)
     {
     
     }
     main()
     {
       long m;
       FILE *out;
       out=fopen("out43.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".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);
     }

选项

答案int jsValue(long n) { int i,str1,half; char xy[20]; ltoa(n,xy,10); /*将长整数n转换成与其等价的字符串存入xy指向的字符串中,输出串为十进制*/ str1=strlen(xy); /*求字符串的长度*/ half=str1/2; for(i=0;i<half;i++) if(xy[i]!=xy[--str1])break; /*判断字符串是否左右对称*/ if(i>=half) return 1; /*如果字符串是回文,则返回1*/ else return 0; /*否则返回0*/ }

解析 本题考查的知识点如下;
   (1)将整型变量转换成字符串。
   (2)字符串长度的确定和循环的使用。
   (3)字符串是否对称的判断。
   回文数是指其各位数字左右均对称的整数,因为给出的数的位数不确定,.所以不采用将各位上的数字转变成单独的数再比较的方法。这里使用函数char*ltoa(long num,char*str,int radix),其功能是将长整数num转换成与其等价的字符串存入str指向的字符串中,输出串的进制由radix决定。将整数转变成字符串后,判断字符串是否左右对称。求得字符串长度后设置两个变量,一个从字符串的头开始向后移动,一个从字符串的倒数第二个元素开始向前移动,直到移至数组的中间元素。若两者所决定的数组元素均相等,则字符串左右对称。
转载请注明原文地址:https://jikaoti.com/ti/2Lh7FFFM
0

最新回复(0)