python连续数字_大量N个连续数字的Python和

I need to get the largest sum of n consecutive digits in a range of a large number.

For example, the range could be 5^150000, within this range I want to find out the largest sum of 50,000 consecutive digits.

The approach I have taken of using two loops seems to never terminate. I will appreciate any input.

The code:

count = 0

tempsum = 0

summ = 0 # variables init

oldlist = ''

newlist = ''

num = str(3**2209) # for example

for digit in num: # go over all the digits in the number

while count < 12 and len(num) >= 12 : # check in 12-digits blocks while possible

oldlist += num[count] # update old list with new digit

tempsum += int(num[count]) # add current digit to sum

count += 1

if tempsum > summ: # check if new sum is larger than old one

summ = tempsum # update sum

newlist = oldlist # update the sequence list

oldlist = ''

count = 0

tempsum = 0

num = num[1:] # slice the 'first' digit of the number

print(newlist, summ) # print sequence and desired sum

解决方案

You don't need two loops.

First, let's put all the digits in a list:

>>> a = list(map(int, str(5**150000)))

Then calculate the sum of the first 50000 digits:

>>> maximum = current = sum(a[:50000])

>>> current

225318

Now, let's loop through the list, removing the lowest digit from the sum and adding the next one 50000 digits ahead during each iteration:

>>> for i in range(0, len(a)-50000):

... current = current - a[i] + a[i+50000]

Check if that new sum is larger than the previous one, and if so, make it the new "interim maximum":

... if current > maximum: maximum = current

...

Once the loop exits, maximum contains the maximum value:

>>> maximum

225621

Let's put it all into a function, so no copying mistakes occur:

def maxdigitsum(number, digits):

l = list(map(int, str(number)))

maximum = current = sum(l[:digits])

for i in range(0, len(l)-digits):

current = current - l[i] + l[i+digits]

if current > maximum: maximum = current

return maximum

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值