0

n多数の範囲で連続する桁の最大の合計を取得する必要があります。

たとえば、範囲は次のよう5^150000になります。この範囲内で、連続する50,000桁の最大の合計を求めます。

私が2つのループを使用するというアプローチは、決して終わらないようです。ご意見をいただければ幸いです。

コード:

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
4

2 に答える 2

6

2つのループは必要ありません。

まず、すべての数字をリストに入れましょう。

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

次に、最初の50000桁の合計を計算します。

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

次に、リストをループして、合計から最下位の桁を削除し、各反復中に次の1桁を50000桁先に追加してみましょう。

>>> for i in range(0, len(a)-50000):
...     current = current - a[i] + a[i+50000]

その新しい合計が前の合計よりも大きいかどうかを確認し、大きい場合は、それを新しい「暫定最大値」にします。

...     if current > maximum: maximum = current
...

ループが終了するとmaximum、最大値が含まれます。

>>> maximum
225621

すべてを関数に入れて、コピーミスが発生しないようにしましょう。

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
于 2013-03-24T16:33:52.133 に答える
1
#!/usr/bin/python
def maxSumOfNConsecutiveDigits(number,numberConsecutiveDigits):
    digits = [int(i) for i in str(number)]
    consecutiveSum = sum(digits[:numberConsecutiveDigits])
    largestSum = consecutiveSum
    for i in xrange(numberConsecutiveDigits,len(digits)):
        consecutiveSum += (digits[i]- digits[i - numberConsecutiveDigits])
        largestSum = max(largestSum, consecutiveSum)
    return largestSum
print maxSumOfNConsecutiveDigits(5**150000,50000)
于 2013-03-24T16:33:47.400 に答える