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

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

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')))

提交结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值