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:
Then calculate the sum of the first 50000 digits:
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:
Check if that new sum is larger than the previous one, and if so, make it the new "interim maximum":
Once the loop exits,
maximum
contains the maximum value:Let's put it all into a function, so no copying mistakes occur: