检查一个数是否为 n%2 或 n&1 的奇数
Checking if a number is odd with n%2 or n&1
我在解决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){ ...
有区别吗?
编辑:在人们指出 'long' 到 'long long' 的变化后,我编辑了问题。
不管在线评委怎么说,模数方法要好得多。尽管在 C++11 之前,任何余数的符号都是 实现定义的 ,这在测试根本没有余数时是不相关的。此外,从 C++11 开始,余数的符号(如果有)必须与输入的符号匹配 n
。
更炫的 n & 1
是 实现定义的 负值 n
:这取决于您的平台是使用 1 的补码、2 的补码还是有符号数对于有符号整数类型。
您解决方案中的问题不是您试图弄清楚数字是奇数还是偶数的方式。
溢出问题。
在我们的第二个解决方案中,您将计数器 n、b、m 和 x 的值类型从 long 更改为 long long。这有所不同。事实上,您也可以使用您在第一次尝试中使用的方法轻松验证更改第二个解决方案中的 odd/even 代码。
它将return相同的结果
在您提交的错误答案中,n、m 和 b 被声明为 "long",而在另一个中,它被声明为 "long long",而给它们的限制是 10^8。 long 的范围取决于平台以获取更多参考,您可以检查“What's the difference between long long and long”。试试改成long long。
我在解决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){ ...
有区别吗?
编辑:在人们指出 'long' 到 'long long' 的变化后,我编辑了问题。
不管在线评委怎么说,模数方法要好得多。尽管在 C++11 之前,任何余数的符号都是 实现定义的 ,这在测试根本没有余数时是不相关的。此外,从 C++11 开始,余数的符号(如果有)必须与输入的符号匹配 n
。
更炫的 n & 1
是 实现定义的 负值 n
:这取决于您的平台是使用 1 的补码、2 的补码还是有符号数对于有符号整数类型。
您解决方案中的问题不是您试图弄清楚数字是奇数还是偶数的方式。
溢出问题。
在我们的第二个解决方案中,您将计数器 n、b、m 和 x 的值类型从 long 更改为 long long。这有所不同。事实上,您也可以使用您在第一次尝试中使用的方法轻松验证更改第二个解决方案中的 odd/even 代码。
它将return相同的结果
在您提交的错误答案中,n、m 和 b 被声明为 "long",而在另一个中,它被声明为 "long long",而给它们的限制是 10^8。 long 的范围取决于平台以获取更多参考,您可以检查“What's the difference between long long and long”。试试改成long long。