【发布时间】:2016-06-08 15:38:07
【问题描述】:
Project Euler 问题 #80 看起来很简单:
https://projecteuler.net/problem=80
使用十进制模块计算平方根到给定精度:
from decimal import Decimal, localcontext
def prob80():
total = 0
for x in range(1,100):
with localcontext() as ctx:
ctx.prec = 100
total+=sum([int(i) for i in str(Decimal(x).sqrt())[2:]])
return total
print prob80()
我返回 40308,据我所知,这与正确答案不符。对于前十个自然数的平方根的数字和,我返回:
0 475 441 0 472 470 397 463 0 456
这里的错误在哪里?我认为这是由于某种舍入误差,但我似乎无法解决。
【问题讨论】:
-
如果您怀疑舍入错误,您应该以不同的方式处理具有整数根的 rumbers。意味着完全无视它们,不希望它们的前 100 个十进制数字加起来为 0
-
如果我忽略整数根的数字,我会返回相同的结果
-
即squares = [1,4,9,16,25,36,49,64,81] for x in range(1,100): if x not in squares:
标签: python decimal rounding precision square