我最近看到一些相当糟糕的尝试,试图检测一个数字是否是偶数,这让我想知道,这到底能有多糟糕?最糟糕的实现/算法是什么(在这种情况下有最糟糕的事情吗?)
对于有数值分析背景的程序员来说,最明显的是
bool is_even(unsigned n) {
int sum = 0;
int addend = 1;
while (n > 0) {
sum += addend;
addend = -addend;
n -= 1;
}
return sum == 0;
}
将一个交变谐波级数(如BigFraction
s)相加,并与ln 2
进行比较,可以使其充分恶化。为了保证鲁棒性,比较阶段需要一些巧妙的数学运算。事实上,任何收敛的交替级数都可以。
一个更需要计算的方法是计算黎曼ζ。对于n
,我们知道它应该是多少。好运。
我相信甚至有更好的更差的解决方案。
欢呼。
最差的实现?
- 将存在的每个数字写入2个平面文件(当然,使用最重的XML) -一个文件有奇数,另一个文件有偶数。
- 使用一些自产的半加密加密来加密文件,这种加密既弱又慢。
- 将文件定位到与逻辑运行位置不同的服务器上。 在运行时
:
- 通过网络拉取偶数文件
- 解密它。
- 将even文件加载到内存中。
- 对每个数字执行for-each循环,看看它是否与输入的数字匹配。
- 如果有,请记录下来。
- 继续迭代到每个存在的偶数的末尾-以防万一。
- 从内存中清除偶数数据-如果源文件被更新为不同的偶数,您不想再次使用它。
可选:对奇数执行相同的处理,只是为了确保它不是偶数和奇数。
如果方法有效,返回true/false;对于所有其他情况,包括错误,只返回null,并确保不记录任何错误数据,等等。
假设——你只关心整数,不关心小数、浮点数、双精度等。