问答题 程序PROG1.G的功能是:寻找并输出11至999之间的数m,它满足m、m 2 和m 3 均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m 2 =121,m 3 =1331皆为回文数。请考生编制函数int JsValue(long m)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out.dat中。
请勿改动主函数main()。
#include <stdio.h>
int jsValue(long m)
{

}
main ()
{
long m;
FILE *out;
out=fopen("out.dat", "w"); //以只写的方式打开文件out.dat,并使文件指针out指向此文件
/*对在11至999之间的数m进行扫描,调用函数jsValue()进行判断,如果m, m2, m3都是回文,则把这三个数输出到屏幕上并输出到文件out.dat中*/
for(m=11; m<1000; m++)
{
if(jsValue(m) && jsValue(m*m) && jsValue(m*m*m))
{
printf("m=%41d,m*m=%61d, m*m*m= %81d\n", m, m*m, m*m*m);
fprintf(out, "m=%41d,m*m=%61d, m*m*m=%81d\n", m, m*m, m*m*m);
}
}
fclose (out); //关闭out.dat文件
}
【正确答案】
【答案解析】long i,n;
i=m;
n=0;
/*在while循环体中对组成整数i的各位上的数字进行逆序排列*/
while(i)
{
n=n*10+i%10;
i/=10;
}
return m==n; //如果逆序排列后的数与原数相同,则返回1 [解析] 回文数字。
①定义长整型变量i、n,并分别赋给初值m、0(m的值等于主函数中m循环变量的值)。
②当变量i的值非零时,即m值不为0时,把n乘以10加上i除以10所得的余数的和赋给变量n,把i除以10所得的商,赋给变量i。实现对整数i各位上的数字进行逆序排列。
③当退出while循环时,判断n是否等于m,如果两者相等,则说明参数m是回文,返回1,否则,不是回文,返回0。