乘法和加减不同,一个负号就能造成值的大小颠倒,对于正数来说乘以最大乘积才是最大的,对于负数来说乘以最小乘积才是最大的;因此整个数组乘积的大小可能会在最大乘积和最小乘积、以及它自身里来回变动,故而需要两个变量分别统计 n=int(input()) nums=list(map(int,input().split())) re=max_c=min_c=nums[0] #分别记录初始结果,以及第一位的最大乘积和最小乘积 for i in range(1,n): # n1,n2=nums[i]*max_c,nums[i]*min_c #最大乘积和最小乘积和新遍历到的数相乘 max_c=max(n1,n2,nums[i]) #最大乘积为:最大乘积、最小乘积、当前数中的最大值 min_c=min(n1,n2,nums[i]) #最大乘积为:最大乘积、最小乘积、当前数中的最小值 if re<max_c: #如果最大乘积大于初始结果,就更新他 re=max_c print(re)