111111111111111111111111111111111111111111111111111111111111
当我把它当作输入时,它会像这样在最后追加一个
111111111111111111111111111111111111111111111111111111111111L
从而影响了我对它的计算..我该如何删除它?
import math
t=raw_input()
l1=[]
a=0
while (str(t)!="" and int(t)!= 0):
l=1
k=int(t)
while(k!= 1):
l=l+1
a=(0.5 + 2.5*(k %2))*k + k % 2
k=a
l1.append(l)
t=raw_input()
a=a+1
for i in range(0,int(a)):
print l1[i]
这是我的代码,它适用于每个测试用例,除了111111111111111111111111111111111111111111111111111111111111
所以我猜想当python考虑这么大的数字时出现问题
答案 0 :(得分:3)
它作为Long Integer输入,在计算方面应该像任何其他数字一样。只有当您使用repr
(或调用repr
的内容,例如打印列表)显示它才会显示它时,它才会显示“L”。
究竟出了什么问题?
修改:感谢您的代码。据我所知,给它一个长或短的数字没什么区别,但它不是很清楚它应该做什么。
答案 1 :(得分:3)
看起来这里发生了两件截然不同的事情。首先,正如其他海报所述,L后缀仅表示Python已将输入值转换为长整数。第二个问题就在这一行:
a=(0.5 + 2.5*(k %2))*k + k % 2
这隐含地导致(0.5 + 2.5*(k %2))*k
值的浮点数。由于浮点数只有53位精度,因此舍入会导致结果不正确。尝试重构该行以避免浮点数学运算,如下所示:
a=(1 + 5*(k %2))*k//2 + k % 2
答案 2 :(得分:2)
正如RichieHindle在他的回答中所指出的那样,它被表示为一个长整数。您可以在以下page了解有关数字在Python中表示的不同方式。
当我使用Python中较大的数字时,我也会看到数字末尾的L.它不应该影响对数字进行的任何计算。例如:
>>> a = 111111111111111111111111111111111111111
>>> a + 1
111111111111111111111111111111111111112L
>>> str(a)
'111111111111111111111111111111111111111'
>>> int(a)
111111111111111111111111111111111111111L
我是在python命令行上做到的。输出数字时,它将具有数字的内部表示,但不应影响任何计算。我在上面引用的链接指定长整数具有 无限精度 。好酷!
答案 3 :(得分:2)
避免python中的数字错误的另一种方法是使用Decimal类型而不是标准float。
答案 4 :(得分:0)
你确定L确实是它的一部分吗?当你打印这么大的数字时,Python会附加一个L表示它是一个长整数对象。