如果已经有一些类似的问题,请通过评论告诉我。
当我们通常尝试区分奇数和偶数时,我们可以尝试以下 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)来更快地区分奇数和偶数?
如果对此有一些直接的答案,我相信许多中级数值算法可以从答案中受益。期待有人的帮助。
谢谢。