检查一个数字是奇数,n%2 还是 n&1

Checking if a number is odd with n%2 or n&1

本文关键字:n%2 还是 数字 一个 检查      更新时间:2023-10-16

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

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

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

变化正在改变

if(n % 2){…

如果(n,1){…

有区别吗?

编辑:在有人指出将'long'改为'long long'之后,我编辑了这个问题

在你的错误答案n中,m和b被声明为"长",而在另一个错误答案中,它被声明为"长",而它们的极限是10^8。long的范围是平台相关的更多参考,你可以查看"long和long之间的区别是什么"。

不管网上的评判者怎么说,模数法要好得多。尽管在c++ 11之前,任何余数的符号都是实现定义的,但当测试根本没有余数时,这并不相关。此外,从c++ 11开始,如果有的话,余数的符号必须与输入n的符号匹配。

对于负n,更花哨的n & 1实现定义的:这取决于您的平台是使用1的补码,2的补码还是有符号整数类型的有符号幅度。

你的解决方案中的问题不在于你试图找出一个数字是奇数还是偶数的方法。

溢出的问题。

在我们的第二个解决方案中,您将计数器n,b,m和x的值类型从long更改为long long。这是有区别的。事实上,你可以很容易地验证,也可以用你在第一次尝试中使用的方法改变第二个解决方案中的奇数/偶数代码。

它将返回相同的结果