首页 > 解决方案 > python3中的最大成对乘积问题以及当输入100000和90000等长输入时返回0

问题描述

我想输入一个长输入并打印它们之间的最大成对乘积,但我得到 0 作为我的输出。例如,想将 10^5 和 9^4 作为我的输入并打印最大成对积 9^9 但我得到 0 作为我的答案。那么如何解决python3中输入长的问题呢?

   n = len(numbers)
   largest = 0
   second = 0
   for i in range(0,n):
     if numbers[i] > largest:
       second = largest
       largest = numbers[i]
       
   max_product = largest * second
   return max_product

if __name__ == '__main__':
   input_numbers = []
   input_n = int(input())
   input_numbers = [int(x) for x in input().split()]
   print(max_pairwise_product(input_numbers))

标签: python-3.xintlong-integer

解决方案


您的代码在 about 的主函数中有一些语法错误input,这应该修复:

if __name__ == '__main__':
   input_numbers = []
   input_n = input()
   input_numbers = [int(x) for x in input_n.split()]
   print(max_pairwise_product(input_numbers))

关于逻辑,想想如果你的 is 会发生什么3 2 1 0。由于最大值将在第一次迭代中被替换,因此将接收issecond的当前值,并且永远不会被另一个替换。要解决这个问题,您应该首先检查该值是否大于第二个值,然后再检查它是否大于. 以下代码段应该可以解决您的问题:largest0largest

def max_pairwise_product(numbers):
  n = len(numbers)
  largest = float('-inf')
  second = float('-inf')
  for i in range(0, n):
    if numbers[i] > second:
      if numbers[i] > largest:
        second = largest
        largest = numbers[i]
      else:
        second = numbers[i]
  
  max_product = largest * second
  return max_product

如果负无穷大,我还更改了largest和的值。second


推荐阅读