首页 热点专区 义务教育 高等教育 出国留学 考研考公

c语言判断回文数,看不大懂,望高人详细解释每一步是什么意思,谢谢!_百...

发布网友 发布时间:2022-04-25 13:01

我来回答

5个回答

热心网友 时间:9分钟前

这是一个偷懒又没有错误输入检查的程序。程序步骤如下:
一、while(s[j++]);找到最后一位的下标。注意,因为用的是j++,即实际上的j比字符串s的最后一位多1位,又%s输入,最后一位必然为'\0',所以实际最后一位数字的下标是j-2
二、i表示从头走,j表示从尾走,头尾相比较,如果一直相等,则是回文,否则,不是。

我说它偷懒,是因为这根本不是回文数的算法,而是对称字符串的算法。就是说你输入的不是数字也可以。比如输入aabbaa
结果一定是Yes。
程序根本没有检查输入是否是数字。
同时,定义的s只有256位,如果输入超过256位,程序结果必然出错。即没有做输入边界检查。

热心网友 时间:7分钟前

代码没错吗?

热心网友 时间:9分钟前

比如说读入一串"12321",s[0]~s[4]就存储了数字,s[5]存储了结束符'\0';
while(s[j++]);运行到j为5的时候结束循环,然后j还要自增一次,所以j为6;
for(i=0,j-=2;i<=j;i++,j--) i从前往后遍历,j-2就对应了最后一个数字所在的下标,也就是4,然后j往前遍历;
if(s[i]!=s[j]) break;如果发现有不等的情况就直接break,此时i<=j成立,否则一直比较到i<=j不成立;
最后根据i、j关系输出结果。

热心网友 时间:2分钟前

while(s[j++]); // j 移动到末尾
for(i=0,j-=2;i<=j;i++,j--)
if(s[i]!=s[j]) break;
头尾进行比较,相同就往里面靠一位,否则break
if(i>j) puts("Yes"); 如果没有break 过 最后推出循环的条件是 i<=j,所以循环之后是i>j
else puts("No"); 如果break 过 那么 i < j

热心网友 时间:5分钟前

while(s[j++]); 当s[j++]的内容为结束符"\0"是退出循环,此时j比字符串最后一个字符的下标多了2。
for(i=0,j-=2;i<=j;i++,j--) 首位两端开始向中间逐个比较
if(s[i]!=s[j]) break; 不相等就跳出循环
if(i>j) puts("Yes"); 循环正常执行完
else puts("No");

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com