首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中处理大数的更有效的方法?

在Python中处理大数的更有效的方法?
EN

Stack Overflow用户
提问于 2013-03-09 02:39:07
回答 3查看 290关注 0票数 0

我在Python中有一个问题,我已经为它创建了一个答案,但我正在努力提高答案的效率。

我不能使用函数,递归,只有基本的东西..

问题是:

数字3的幂2209有1000位数字。找出12个和最大的序列数。

例如:5次方36等于14551915228366851806640625。乘以最大和的12个序列号是836685180664。

代码语言:javascript
复制
sumOfBig=0
Big=""
x=5**36
strp=str(x)
s=len(strp)
print(x)
print()
for i in range(s-11):
    new=strp[i:i+12]
    l=0
    for j in new:
        l=l+int(j)
    print(i)
    print(new)
    print(l)
    print()
    if l>sumOfBig:
        sumOfBig=l
        Big=new
print(Big)
print(sumOfBig)

你们对更好的代码有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2013-03-09 02:48:13

那么,你可以有更有效的方法来对这12个序列号求和。您可以跟踪12个序列号,从子集的和中弹出/减去最旧(最左边)的数字,推入/添加最新(最右边)的数字。

此外,sum(iterable)是一个内置函数。

我的新代码只有基本的listfor-loop

代码语言:javascript
复制
x = 5 ** 36
num_list = [int(i) for i in str(x)]
sumOfBig = last_sum = sum(num_list[:12])
maximal_index = 0

for i, n in enumerate(num_list[12:]):
   last_sum = last_sum + n - num_list[i]
   if last_sum > sumOfBig:
      maximal_index = i+1
      sumOfBig = last_sum


print num_list[maximal_index:maximal_index+12] #[8, 3, 6, 6, 8, 5, 1, 8, 0, 6, 6, 4]
票数 4
EN

Stack Overflow用户

发布于 2013-03-09 02:55:18

代码语言:javascript
复制
x = 5**36
str_x = [int(i) for i in str(x)]


curBestIndex = 0
curBestSum = sum(str_x[:12])
curSum = curBestSum

for i in range(len(str_x) - 11):
    delta = str_x[i + 11] - str_x[i]
    curSum += delta
    if curSum > curBestSum:
        curBestSum = curSum
        curBestIndex = i

big = str(x)[curBestIndex : curBestIndex + 12]
print(big)
print(curBestSum)
票数 1
EN

Stack Overflow用户

发布于 2013-03-09 03:10:40

这里有一个方法,可以帮助排除所有11/12事件的发生,等等。

代码语言:javascript
复制
MAX_LENGTH = 12
x = 5 ** 36

sequence = []
d = []

for i in str(x):
    d.append(int(i))
    if len(d) > MAX_LENGTH:
        d.pop(0)
    if sum(d) >= sum(sequence):
        sequence = list(d)

print sequence, sum(sequence)

返回:

代码语言:javascript
复制
>>> 
[8, 3, 6, 6, 8, 5, 1, 8, 0, 6, 6, 4] 61

根据Python的Zen,“可读性很重要”,我认为这里给出的单行操作比切片操作要简单得多,特别是当考虑到来自多个硬编码序列长度的实例的off-by-one错误时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15300995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档