python 50分求助

B3720 [语言月赛202303] Out for Dinner B

MRZ000 @ 2024-12-02 23:28:46

x = int(input())
str1 = input()
if "B" in str1 and "C" not in str1:
    x *= 0.8
elif "C" in str1 and "B" not in str1:
    x *= 0.7
elif "B" in str1 and "C"  in str1:
    x *= 0.6

print("%d"%x)

by Terrible @ 2024-12-03 00:41:59

@MRZ000

错误原因:数据范围最大设定在 10^{18},但 x*=0.8 在计算过程中执行的是浮点乘法,得到的是双精度浮点数,存在特别大的数据使得计算结果无法准确地用双精度浮点数表示,即运算结果被迫丢弃掉了低位信息,但后面的数字应格式要求而需要精确地保留。

可以使用整数运算得到 int 型数,程序如下。

x = int(input())
str1 = input()
if "B" in str1 and "C" not in str1:
    x = x // 10 * 8
elif "C" in str1 and "B" not in str1:
    x = x // 10 * 7
elif "B" in str1 and "C"  in str1:
    x = x // 10 * 6

print("%d"%x)

by MRZ000 @ 2024-12-03 09:33:06

@Terrible 谢谢一直以来都没想过这个问题


|