这个回文测试有什么问题吗? 它是用C语言编写的。
#include<stdio.h>
main()
{
int a, b, c, d, e, div1, div2;
printf("Enter a 5 digits number. (Please put space every time you type each digit.) \n");
scanf("%d %d %d %d %d", &a,&b,&c,&d,&e);
div1= a%e;
div2= b%d;
if(div1==0 && div2==0){
printf("The number %d%d%d%d%d is a palindrome.", a, b, c, d, e);
}
else if(div1!=0 || div2!=0){
printf("The number %d%d%d%d%d is not a palindrome.", a, b, c, d, e);
}
return 0;
}
答案 0 :(得分:4)
是
键入6 4 3 2 3
会使程序输出为回文..
而不是
div1= a%e; // a%e is 0 even when a = 6 and e = 3
div2= b%d; // b%d is 0 even when b = 4 and d = 2
if(div1==0 && div2==0)
即使a = 6且e = 3
,a%e也为0 即使b = 4且d = 2 , b%d为0
您需要进行检查 作为旁注。这不是检查回文的正确方法。 以正确的方式查看this链接。if(a == e && b == d)
答案 1 :(得分:3)
是的,有。
例如,如果输入是
1 0 1 0 1
该程序将调用未定义的行为,因为%
运算符的第二个操作数变为零,并且通常会崩溃。
另一个例子:该程序会将5 4 3 2 1
视为回文。
为什么地球上有奇怪的分裂?为什么他们不能简单
div1= a==e;
div2= b==d;
? (名称divn
现在不太好)
还有一些小错误点,例如使用main()
代替int main(void)
而不检查scanf()
是否成功阅读了5个数字。
答案 2 :(得分:2)
两个问题:
回文测试为a == e && b == d
。
n % 0
的行为未定义。所以零d
或e
会给您带来麻烦。
幸运的是(2)在将代码重构为1时消失。