使用n%2或n& 1检查数字是否为奇数

时间:2016-09-19 09:35:35

标签: c++ if-statement operators bitwise-operators

我正在解决https://www.codechef.com/COOK74/problems/TALAZY

首次提交(错误答案):https://www.codechef.com/viewsolution/11557512

第二次提交(已接受):https://www.codechef.com/viewsolution/11560985

变化正在发生变化

  

if(n%2){...

  

if(n& 1){...

它有所不同吗?

编辑:在人们指出“长”到“长”的变化之后,我编辑了这个问题。

3 个答案:

答案 0 :(得分:1)

尽管在线评委表示,模数方法在一英里之内更好。虽然在C ++ 11之前,任何余数的符号都是实现定义,但在测试时根本没有余数时这是不相关的。除此之外,从C ++ 11开始,余数的符号(如果有的话)必须与输入n的签名匹配。

对于负n & 1,闪烁的n实现定义的:它取决于您的平台是否使用1的补码,2的补码或带符号的整数类型的有符号幅度。

答案 1 :(得分:1)

在您提交的错误答案中,m和b被声明为" long"在另一个中,它被宣布为" long long"而给出的限制是10 ^ 8。 long的范围取决于平台,以供更多参考,您可以检查" What's the difference between long long and long"。尝试将其更改为很长时间。

答案 2 :(得分:0)

解决方案中的问题不在于您试图弄清楚数字是奇数还是偶数。

溢出的问题。

在我们的第二个解决方案中,您将计数器的值类型n,b,m和x从 long 更改为 long long 。这有所不同。实际上,您可以使用您在第一次尝试中使用的方法轻松验证在第二个解决方案中更改奇数/偶数代码。

它将返回相同的结果