发布网友 发布时间: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");