小编use*_*281的帖子

如何更有效地区分大数的奇数和偶数?

如果已经有一些类似的问题,请通过评论告诉我。

当我们通常尝试区分奇数和偶数时,我们可以尝试以下 C++ 代码。

    int main() {
        int n=10;
        
        for(n; n>0; n--){
            
            if(n%2==0) std::cout<< "even" << '\n';
            if(n%2==1) std::cout<< "odd" << '\n';      
        }   
    }
Run Code Online (Sandbox Code Playgroud)

我确信超过 99% 的本科生,甚至专业人士,都会使用条件“if (n%2==0)...else”来区分奇数和偶数。

然而,当数字范围足够大时,在我看来,“if (n%2==0)...else”方法可能效率很低。让我来解释一下原因。

 int main() {
        int n=100000;
        
        for(n; n>0; n--){
            
            if(n%2==0) std::cout<< "even" << '\n';
            if(n%2==1) std::cout<< "odd" << '\n';      
        }   
    }
Run Code Online (Sandbox Code Playgroud)

当整数“n”很小时,除以每个小于它的正整数并不是什么大问题。

但是,当它变大时,除了分割之外,难道没有其他更有效的方法吗?

我们人类通常不会计算模 2 来知道“10^1000 + 1”是奇数还是偶数。对于“10^1000 + 2”、“10^1000 + 3”等也是如此。我们只需查看整数的最后一位就可以知道答案。

我不是计算机科学方面的专家,所以尽管我不确定这些信息,但我听说机器对二进制数比人类友好得多。如果是这样,计算机是否可以仅通过查看输入的最后一位数字(无论是 0 还是 1)来更快地区分奇数和偶数?

如果对此有一些直接的答案,我相信许多中级数值算法可以从答案中受益。期待有人的帮助。

谢谢。

c++ sorting algorithm numeric numerical-methods

1
推荐指数
1
解决办法
582
查看次数

标签 统计

algorithm ×1

c++ ×1

numeric ×1

numerical-methods ×1

sorting ×1