这是我的Python代码,但根据projecteuler.net的要求给出的答案是不正确的。
a = 2**1000
total = 0
while a >= 1:
temp = a % 10
total = total + temp
a = int(a/10)
print(total)
它输出了1189。我犯了什么错误吗?
这是我的Python代码,但根据projecteuler.net的要求给出的答案是不正确的。
a = 2**1000
total = 0
while a >= 1:
temp = a % 10
total = total + temp
a = int(a/10)
print(total)
2 ** 1000
对于所有数字来说太大了,不能全部适合一个浮点数,因此当您执行a = int(a/10)
时,数字会被四舍五入。Python float
只有53位精度,您可以在官方教程文章:浮点算术:问题和限制以及维基百科: 双精度浮点格式中了解更多相关信息。还可以查看浮点数运算是否有问题?。2 ** 1000
但是10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
print(format(2**1000 / 10, 'f'))
给我们的结果是:
您可以看到,在1071508607186267380429101388171324322483904737701556012694158454746129413355810495130824665231870799934327252763807170417136096893411236061781867579266085792026680021578208129860941078404632071895251811587214122307926025420797364998626502669722909817741077261714977537247847201331018951634334519394304.000000
10715086071862673
之后,数字开始出现错误。//
地板除法运算符。a = 2**1000
total = 0
while a >= 1:
temp = a % 10
total = total + temp
a = a // 10
print(total)
输出
1366
a = 2**1000
total = 0
while a:
total += a % 10
a //= 10
print(total)
a
转换为字符串,然后将每个数字再次转换为int
并求和。我使用位移来计算a
,因为它比指数运算更快。print(sum(int(u) for u in str(1 << 1000)))
float
版本不同吗? - J...S