在Python中输入时出错
我输入这个数字时,它在最后加了一个字母L,变成了这样:
111111111111111111111111111111111111111111111111111111111111L
这影响了我的计算……我该怎么去掉这个L呢?
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处理这么大的数字时出了点问题。
5 个回答
2
在Python中,避免数字错误的另一种方法是使用Decimal类型,而不是标准的浮点数(float)。
请查看官方文档了解更多信息。
3
这个输入的是一个长整型数字,它在计算时应该和其他数字一样正常使用。只有在你用 repr
(或者其他会调用 repr
的方法,比如打印一个列表)来显示它的时候,它才会显示一个 'L'。
到底出了什么问题呢?
编辑: 谢谢你的代码。从我看到的情况来看,给它一个长数字或短数字没有什么区别,但现在还不太清楚它应该做什么。
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