我写了一个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次,不是吗?模数为负数还是什么?
答案 0 :(得分:5)
将n%2==!0
替换为n % 2 != 0
。额外的间距是我个人的口味。
n%2==!0
被评估为n%2==(!0)
,而!0
等于1
。疯狂地,你拥有它的方式对于积极的n
案例非常有效,但它打破了负n % 2
案例,对于奇数负n
,从C +返回-1
+11以后。 (在此之前,结果是实现定义的。)