Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查一个数字是否为奇数且为n%2或n&;1._C++_If Statement_Operators_Bitwise Operators - Fatal编程技术网

C++ 检查一个数字是否为奇数且为n%2或n&;1.

C++ 检查一个数字是否为奇数且为n%2或n&;1.,c++,if-statement,operators,bitwise-operators,C++,If Statement,Operators,Bitwise Operators,我在解决 首次提交(答错): 第二次提交(已接受): 变化正在改变 如果(n%2){ 到 如果(n&1){ 这有区别吗 编辑:在人们指出关于“long”到“long long”的变化后,我对问题进行了编辑。不管在线法官怎么说,模数法更好一些。尽管C++11之前,任何余数的符号都是实现定义的,但在测试根本没有余数时,这与此无关。此外,从C++11开始,余数的符号(如果有)必须与输入的符号相匹配n flashiern&1是为负n定义的实现:这取决于您的平台是使用1的补码、2的补码还是有符号的整数类型

我在解决

首次提交(答错):

第二次提交(已接受):

变化正在改变

如果(n%2){

如果(n&1){

这有区别吗


编辑:在人们指出关于“long”到“long long”的变化后,我对问题进行了编辑。

不管在线法官怎么说,模数法更好一些。尽管C++11之前,任何余数的符号都是实现定义的,但在测试根本没有余数时,这与此无关。此外,从C++11开始,余数的符号(如果有)必须与输入的符号相匹配
n


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

不管在线法官怎么说,模方法更好一些。尽管在C++11之前,任何余数的符号都是实现定义的,这与测试完全没有余数无关。此外,从C++11开始,余数的符号(如果有)必须与输入的符号相匹配


flashier
n&1
是为负数
n
定义的实现:这取决于您的平台对有符号整数类型使用1的补码、2的补码还是有符号的大小。

解决方案中的问题不是您试图找出一个数字是奇数还是偶数的方式

问题在于溢出

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


它将返回相同的结果

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

问题在于溢出

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



它将返回相同的结果

在您的错误答案提交中,n、m和b被声明为“长”,而在另一个提交中,它们被声明为“长”,而给定的限制为10^8。长的范围取决于平台,以获取更多参考,您可以检查“”。尝试将其更改为long-long。

在错误答案提交中,n、m和b被声明为“long”,而在另一个提交中,它们被声明为“long-long”,而给定的限制为10^8。long的范围取决于平台,以获取更多参考,您可以检查“”。请尝试将其更改为long-long。

请不要在此处询问有关联机代码判断引擎的问题。很可能没有人能告诉您他们的测试用例失败的地方,因为这些测试用例通常不会公开。即使您测试的是在本地环境中运行的,您也可能错过了测试一些应用的边缘用例在在线挑战中,你必须要有创造力,并努力找到它们。此外,从长远来看,这些问题可能没有任何价值,除了欺骗在线比赛,而且什么也学不到。这两种情况下的代码都是一样的。所以我不认为有任何遗漏任何测试用例的问题。我的重点是为什么操作符的变化会起作用atements的工作原理是一样的。您可以摆脱测试并编写
x=(n+1)>>1;
很好。谢谢!这两个代码之间有一些变化。请不要在这里询问有关在线代码判断引擎的问题。很可能没有人能从他们的测试用例中告诉你失败的地方,因为这些通常不会被披露。即使你测试的是在你的本地环境中运行的,你也可能没有成功d测试在线挑战中应用的一些边缘案例。要有创意并尝试找到它们。此外,从长远来看,这类问题可能没有任何价值,除了作弊在线竞赛,而且什么也学不到。这两种情况下的代码都是一样的。所以我不认为有任何遗漏任何测试案例的问题。我的重点是为什么运算符中的更改有效?这两个语句的工作原理相同。您可以取消测试并编写
x=(n+1)>>1;
Nice one。谢谢!这两个代码之间有几处更改。您的意思是说这两个语句在所有情况下都不安全,以及“if(n%2==1)”是安全的方法。是吗?一定要让我知道什么是最好的方法。不。它们都受到实现定义的影响。我已经粘贴了一个安全的方法。这太长了,不能只检查一个数字是奇数还是偶数。无论如何,谢谢!这是错误的。从C++11开始,模数现在保证满足左边的符号。参见t的第5.6.4节他是C++的标准([Exp.Mul])。我是非常愚蠢的。还有一个编辑,现在是wiki回答的时候了。你的意思是说这两个都不是安全的,如果“(n% 2=1)”。是安全的方法。是吗?一定要让我知道什么是最好的方法。不。它们都受到实现定义的影响。我已经粘贴了一个安全的方法。这太长了,不能只检查一个数字是奇数还是偶数。无论如何,谢谢!这是错误的。从C++11开始,模数现在保证满足左边的符号。参见t的第5.6.4节他C++标准([ Exp.MUL]).是的-我太傻了。又一次编辑,是时候把这个答案维基起来了。非常感谢。我会注意的。学会了检查一个数字是否奇数以及处理溢出。非常感谢。我会注意的。学会了检查一个数字是否奇数以及处理溢出。非常感谢。我会注意的。学会了检查一个数字是否奇数分子量是奇数