我正在编写一个程序,用于对非负整数的位数进行计数,该整数的上限为10 ^ {1000000},时限为12秒 我声明了一个大小为1000000的数组,索引0,1,2 ...,1000000对应于由10 ^ {array index}表示的数字的位数。 但是,对于接近10 ^ {10000}的输入范围,我得到了超过时间限制。 请内联相同的代码:
def Number(x):
a=[0]*(1000000)
for j in xrange(len(a)):
#print j
a[j]=j+1
i=0
flag=0
flagc=0
counter=0
while(i<len(a)-1):
#print x
if (10**i)==x:
print a[i]
flag=1
break
elif x>(10**i) and x<(10**(i+1)):
print a[i]
flag=1
break
i=i+1
if (i==len(a)-1 and flag==0 and x==(10**i)):
print a[i]
number=int(input())
Number(number+1)
当输入接近10 ^ 10000时,将超过时间限制,请帮忙处理上述较大的输入值
答案 0 :(得分:0)
在纯python中执行此操作的最简单方法是使用len(number)
,其中“数字”具有必需的基数。
答案 1 :(得分:0)
如上面的注释所示,math.log10
对于大量数字不够准确。尝试while
循环:
n = 10 ** 10000 - 1
count = 0
while n > 0:
n //= 10
count += 1
print(count)
输出:
10000
将n
更改为10 ** 10000
会输出10001
。
编辑:我发现了一些非常令人惊讶的东西(至少对我而言):
len(str(n))
实际上非常快!我测试了最大为10 ^ 1000000的数字,并在几秒钟内完成了执行!
答案 2 :(得分:0)
对于评论者说这是一个整数,此问题中讨论的数据将溢出一个整数,并且由于它们的长度,这些数字必须在内存中表示为字符串。
答案 3 :(得分:0)
OP在一条评论中表示,他的问题是他需要采用字符串形式的数字输入,将数字加1,然后返回数字。
在数字上加1将更改位数,并且仅在字符串完全由9
组成的情况下才会更改。一个简单的测试就可以做到这一点。如果全部为9
,则输出字符串长度加1,否则输出不变的字符串长度。
num = input()
length = len(num)
if num == '9' * length: # checks if string is all 9's
print(length + 1)
else:
print(length)
通过消除转换为int
的麻烦,我们节省了很多时间。这段代码执行的时间仅为几分之一秒。