用python来解PAT乙级1049数列的片段和 -20-满分无错误

tech2024-10-30  28

本题题意很好理解,也能够立马动手,就这样:

n = int(input()) lst = list(map(float,input().split())) num = 0 for i in range(n): num += lst[i]*(i+1)*(n-i) print('%.2f'%(num))

但是提交的时候大概都会出现一个错误:

因为大家会习惯性的直接使用float,而浮点型计算其实是不准确的

所以在这里应该使用decimal类型,附上代码:

from decimal import Decimal n = int(input()) # 将浮点数都转换为Decimal类型,防止float计算结果不够精确的问题 a = list(map(Decimal, input().split(' '))) result = Decimal(0) # a[i]在所有的片段中出现了(i+1)*(n-i)次 for i in range(n): result = result + a[i] * (i + 1) * (n - i) # 使用quantize取小数点后两位并按格式输出 print(result.quantize(Decimal('0.00')))

提交结果:

最新回复(0)