下列程序的功能是:寻找并输出11至999之间的数m,满足m、m2和m3均为回文数。所谓回文数是指各位数字
下列程序的功能是:寻找并输出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>#include <stdlib.h>#include <string.h>int jsValue(long n){ }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);}
【解析及答案】
本题属于按条件查找类型的题目,考核的知识点为判断回文数的算法。
本题的解题思路为:在11~999之间逐个进行判断,看当前数字是否为回文数。若是回文数,则判断其平方是否为回文数;若其平方也是回文数,则判断其立方是否为回文数;若其立方仍然是回文数,则将原数返回。判断回文数的方法是:先将数字转换为字符型数据,再将其第一个字符与最后一个字符相比较,以此类推,一直执行到中间两个数字比较完成为止;若该字符串左右对称,则该数是回文数。程序的流程是:首先打开文件out.dat,然后通过for循环来调用函数jsValue() ,若m、m2、m3都是回文数,即函数jsValue() 的返回值都为1时,就将m、m2、m3写入到文件out.dat中,最后关闭文件out.dat。
在函数jsValue() 中,首先,函数接收到一个长整型数据作为参数,然后调用函数itoa()。该库函数的格式为itoa(参数1, 参数2, 参数3)。参数1为一个整型数据,参数2为一个字符串的地址,参数3为一个整型常量。该函数的功能是:将第一个参数转换为字符串并存入第二个参数值所对应的内存单元中,然后通过函数strlen() 得到数组xy的实际长度并将其赋予strl。下面的for循环的功能是比较第一个字符与最后一个字符,如果不等,则跳出循环;如果相等,则继续比较下一个字符。在比较的过程中,每次i与strl分别向后和向前移动1位,比较一直进行到中间元素被比较后或者有不相等的元素时结束。if语句的功能是确定跳出for循环的原因,若ihalf,则比较完成,返回1,证明该数字为回文数;否则返回0(即不是回文数),函数结束。
int jsvalue(long n) /*标准答案*/
{int I,strl,half;
char xy[20];
ltoa(n,xy,10);
strl=strlen(xy);
half=strl/2;
for(I=0;I
if(I>=half) return 1;
else return 0;
}
求a+aa+aaa+aa.a程序填空,不要改变与输入输出有关的语句.输入2 个正整数a 和n, 求 其他 2020-05-15 …
某人把1,2,3,…n这n个数输入电脑求平均数,但他少输了一个数,平均数为35+5/7,则少输得数 数学 2020-05-17 …
今有甲乙丙3台对自然数运算的计算机,它们的功能如下:输入x至甲输出3x+2输入y至乙当y小于或等于 数学 2020-06-08 …
如图是一个数值转换器,每次输入3个不为零的数,经转换器转换后输出3个新数,规律如下:当输入数分别为 其他 2020-06-12 …
入1,输出1/2,输入2,输出2/5,输入3.输出3/10,输入4,输出4/17当输出的数是122 数学 2020-06-15 …
求大神帮忙编下这几个JAVA程序1、将一个正整数分解质因数.例如:输入90,打印出90=2*3*3 其他 2020-07-17 …
可以把一个自然数分解成若干个自然数之和如N=3有:3=1+1+1=1+2共2种分解方案(注:1+2 数学 2020-07-31 …
1,输入一个不多于5位的正整数2输出该数是几位数该数的逆数(例如123的逆数是321输出)3输出各个 其他 2020-11-20 …
描述输入x(x为整数),求函数值函数定义如下:F(x)=xx小于3F(x)=F(x/3)*2x大于等 其他 2020-11-28 …
急求用c++编写下列程序1,从键盘上输入一组数据,期中该组数据是以输入0作为结束的,求这组数中的最大 其他 2020-12-24 …