这个模数我做错了什么?

时间:2017-12-04 07:56:03

标签: c++

我写了一个c ++程序,用户收到一个数字,打印1,如果是正数和偶数,打印2,如果正和奇数,打印3,如果是负和偶数,打印4,如果是负和奇数,打印0,如果为零。 这是我的代码:

#include <iostream>
using namespace std;
int main () {
int n;
cin>>n;
if (n>0 && n%2==0)
    cout <<"1";
else if (n>0 && n%2==!0)
    cout <<"2";
else if (n<0 &&  n%2==0)
    cout <<"3";
else if (n<0 && n%2==!0)
    cout <<"4";
else if (n==0)
cout <<"0";
return 0;

}

一切都运行得很顺利,除了第四种情况,每当我输入负数和奇数时,它在屏幕上什么都不打印,这意味着所有这些情况都不是真的,我做错了第4次,不是吗?模数为负数还是什么?

1 个答案:

答案 0 :(得分:5)

n%2==!0替换为n % 2 != 0。额外的间距是我个人的口味。

由于运算符优先级

n%2==!0被评估为n%2==(!0),而!0等于1。疯狂地,你拥有它的方式对于积极的n案例非常有效,但它打破了负n % 2案例,对于奇数负n,从C +返回-1 +11以后。 (在此之前,结果是实现定义的。)