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个
哪里出错了?我想这是由于某种舍入误差,但我似乎无法解决。在
http://blog.dreamshire.com/project-euler-80-solution/
你犯了两个错误,这两个错误相互抵消了。在
1
sqrt(2)
的第100位和第101位是27
,所以当你使用prec=100
时,它被四舍五入到{顺便说一句,有一个简单明了的实现。} 方法:
Decimal
对象具有^{所以你可以选择:
不需要字符串转换或“iffing”。在
相关问题 更多 >
编程相关推荐