python计算非负整数中的位数

时间:2018-11-27 21:13:02

标签: python

我正在编写一个程序,用于对非负整数的位数进行计数,该整数的上限为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时,将超过时间限制,请帮忙处理上述较大的输入值

4 个答案:

答案 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的麻烦,我们节省了很多时间。这段代码执行的时间仅为几分之一秒。