为了账号安全,请及时绑定邮箱和手机立即绑定

如下内容中,我在课本后的库函数里没找见他的影子,它在其是什么作用呀?

如下内容中,我在课本后的库函数里没找见他的影子,它在其是什么作用呀?

C
隔江千里 2022-12-22 17:13:15
下列程序的功能是:寻找并输出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);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问题:1.解法一,解法二都没看懂,还有就是解法一中的函数“ltoa(n,xy,10);”2.在自定义的函数int jsValue(long n)里这中解法二的while语句把我整蒙了,由于处学它这么写和课本上的差异也太大了点。看不懂是咋回事,能不能给解释的详细点,快考试了,急3.两个自定义的函数解法一个也没看懂,能不能给一步一步的解释一下,谢谢了4.能不能给说以下这个题的解题思想,再就是给看一下解法二,也讲讲解法二的解题思想
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

int jsValue(long n)
{int I,strl,half; 定义三个变量
char xy[20]; 定义一个数组
ltoa(n,xy,10); 把参数以10进制格式转换为字符串,存放在xy数组中
strl=strlen(xy); 得到数组长度,就是参数是几位的
half=strl/2; 得到数组中间位置,就是一个数字的中间啦
for(I=0;I<half;I++) 开始循环,只要循环数组长度的一般
if(xy[I]!=xy[--strl]) break; 第一位与相应后面的以为比较,不相等,那肯定就不是回文了,退出
if(I>=half) return 1; 如果循环一直进行,那最后肯定i会大于half,这时就是回文了,并且返回1
else return 0; 不是回文,返回2
}

int jsValue(long n)
{long int s=0,k; 定义两临时变量,s是个关键,用来存放倒置的数据
k=n;  
while(k) 当k不为0就一直循环
{ s=s*10+k%10; 如果k=123,s就是321,你仔细研究下,123%10=3,123/10=12
k/=10;
}
if(s==n) return 1; 如果n倒过来还和本身相等,那就是回文了
if(s!=n) return 0; 否则不是


不知道这样讲你理解不。还是弄个数字来一步一步算算看,体会一下就明白了
希望你学习愉快!


查看完整回答
反对 回复 2022-12-25
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信