回文试验

时间:2016-02-04 14:02:31

标签: c palindrome

这个回文测试有什么问题吗? 它是用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;
}

3 个答案:

答案 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

您需要进行检查

if(a == e && b == d)

作为旁注。这不是检查回文的正确方法。

以正确的方式查看this链接。

答案 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)

两个问题:

  1. 回文测试为a == e && b == d

  2. n % 0的行为未定义。所以零de会给您带来麻烦。

  3. 幸运的是(2)在将代码重构为1时消失。