题解:P1919 【模板】高精度乘法 | A*B Problem 升级版
这是一篇 python 题解
题意分析:
用高精度计算两个数的乘积。
算法介绍:
decimal 模块:专为高精度十进制运算设计的工具库,适用于需要精确数值处理和避免二进制浮点误差的场景。
模块导入与对象创建:
导入模块:
from decimal import Decimal, getcontext
创建 Decimal 对象:
num1 = Decimal('0.1') # 字符串格式
num2 = Decimal(123) # 整数格式
精度与上下文控制:
设置全局精度:
getcontext().prec = 10 # 全局保留10位有效数字
result = Decimal('0.1') + Decimal('0.2') # 结果为0.3000000000
舍入模式设置:
支持 ROUND_HALF_UP (四舍五入)、 ROUND_DOWN(直接截断)等模式。
getcontext().rounding = ROUND_HALF_UP
运算与比较:
基本算术运算:
a = Decimal('19.99')
b = Decimal('3')
total = a * b # 输出59.97
比较运算:
if Decimal('0.1') + Decimal('0.2') == Decimal('0.3'): # 结果为True
print("相等")
正确性证明
sys.stdin.readline() 的时间复杂度为
代码实现:
从 decimal 模块导入 Decimal 类和 setcontext 函数,设置计算上下文,精度
from decimal import *// 导入 decimal 模块的所有内容。
import sys//导入 sys 模块用于标准输入输出。
setcontext(Context(prec=10000000,Emax=10000000,Emin=0))//设置 decimal 的运算上下文。
print((Decimal(sys.stdin.readline())*Decimal(sys.stdin.readline())))//从标准输入读取两行,转换为 Decimal 对象后相乘并打印结果。