来自http://projecteuler.net/index.php?section=problems&id=99
比较以索引形式写的两个数字如2 11和3 7并不困难,因为任何计算器都会确认2 11 = 2048 3 7 = 2187.
但是,确认632382 518061 > 519432 525806会更加困难,因为这两个数字都包含超过三百万个数字.
使用base_exp.txt(右键单击并"将链接/目标另存为..."),一个22K文本文件包含每行上带有基数/指数对的一千行,确定哪个行号具有最大数值.
我怎么能接近这个?
不是完整的解决方案,而是一些想法.您可以使用以下公式:
log(a x)= x*loga
log10可以很容易地估计为位数.通过计算右移可以很容易地估计log2.
基于以上所述,您可以显着缩小列表范围.对于剩余的数字,您必须进行完整的计算.项目Euler中是否允许数学函数?如果是,最好使用对数.
由于对数是一个单调函数,而不是x,你可以比较x*log a来找到最大值.但是,您可能需要考虑数值精度.