简体   繁体   中英

Python code for multiplying adjacent digits of a big number and finding maximum possible product, not giving desired result

Here is a Python code for finding maximum product we can get from 13 adjacent digits of a number. There is no error message, but this program is not giving the desired output. I am getting(in repl.it) 1 everytime, though it is clear that the answer is not 1 . I am new to programming.

My attempt

I have converted the number into an string and stored it into a array to get element by element. The outer for loop traversing over all the numbers(last time when i have value len(n)-12 , i+j will reach the last entry of the array. (Though the array stores the number in a reverse order, I haven't reversed it because, we don't need to).

n = "123899778978978787888787778788767677667"
arr = []
for i in range(len(n)):
  arr.append(int(n)%10)
  n = str(int(n)//10)

mul = 1
max_mult = 1
for i in range(len(n)-12):
  for j in range(13):
    mul = mul * int(arr[i+j]) 

  if(max_mult<mul):
    max_mult = mul
print(max_mult)

Can anyone tell me where I am going wrong? Any help will be appreciated.

Your logic can be simplified somewhat using zip :

n_list = list(map(int, list(n)))
res = max(i * j for i, j in zip(n_list, n_list[1:]))  # 81

If you insist on using a for loop:

n_list = list(map(int, list(n)))
max_mult = 0

for i, j in zip(n_list, n_list[1:]):
    mult = i * j
    if mult > max_mult:
        max_mult = mult

print(max_mult)  # 81

Note you can modify your existing range -based iteration, but this is not considered Pythonic:

for i in range(len(n_list) - 1):
    mult = n_list[i] * n_list[i+1]
    if mult > max_mult:
        max_mult = mult

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM