我使用python已经有一段时间了,我对它的使用非常满意,但是我遇到了一个非常奇怪的问题,出于某种原因,当我尝试输入一个大数字并使用int()将其转换为整数时,该数字总是关闭的。 这是一个针对codeforces问题的代码,逻辑是正确的,但由于某种原因,如果我输入n=99999999999999,会发生的情况是n将等于10^18。我假设这是python的一个近似值,我怎样才能避免呢
t=int(input())
for _ in range(t):
n=int(input())
if n<10:
print(n)
else:
flag=True
while flag:
for i in range(int(math.log10(n))+1):
digit=n%(10**(i+1))//(10**i)
if digit==0:
continue
if not (n%digit==0):
break
if i==int(math.log10(n)):
print(n)
flag=False
n+=1
您可以用
len(n)-1
替换int(math.log10(n))
。完全保持在int范围内,Python应该支持“任意大”的数字除此之外,我没有检查您的算法:)
事实上,
n
是正确的,但是math.log10()
对浮点数有效,而不是整数,因此存在舍入错误,尽管我不确定确切位置。另见:Is floating point math broken?顺便说一句,你偏离了一个数量级:10^17,而不是10^18
要最终解决此问题,请参见Is floating point arbitrary precision available?,例如:
相关问题 更多 >
编程相关推荐