专栏文章

题解:P1919 【模板】高精度乘法 | A*B Problem 升级版

P1919题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipbi6is
此快照首次捕获于
2025/12/03 09:17
3 个月前
此快照最后确认于
2025/12/03 09:17
3 个月前
查看原文
这是一篇 python 题解

题意分析:

用高精度计算两个数的乘积。

算法介绍:

decimal 模块:专为高精度十进制运算设计的工具库,适用于需要精确数值处理和避免二进制浮点误差的场景。

模块导入与对象创建:

导入模块:
PYTHON
from decimal import Decimal, getcontext
创建 Decimal 对象:
PYTHON
num1 = Decimal('0.1')  # 字符串格式
num2 = Decimal(123)    # 整数格式

精度与上下文控制:

设置全局精度:
PYTHON
getcontext().prec = 10  # 全局保留10位有效数字
result = Decimal('0.1') + Decimal('0.2')  # 结果为0.3000000000
舍入模式设置:
支持 ROUND_HALF_UP (四舍五入)、 ROUND_DOWN(直接截断)等模式。
PYTHON
getcontext().rounding = ROUND_HALF_UP

运算与比较:

基本算术运算:
PYTHON
a = Decimal('19.99')
b = Decimal('3')
total = a * b  # 输出59.97
‌比较运算:
PYTHON
if Decimal('0.1') + Decimal('0.2') == Decimal('0.3'):  # 结果为True
print("相等")

正确性证明

sys.stdin.readline() 的时间复杂度为 O(n)O(n),字符串转 Decimal 的时间复杂度为 O(n2)O(n^{2}),乘法运算的时间复杂度为 O(n2)O(n^{2}),综合复杂度为 O(n2)O(n^{2})‌,可过。

代码实现:

从 decimal 模块导入 Decimal 类和 setcontext 函数,设置计算上下文,精度 1000000010000000 位,再标准读入两个数,将两个数转换为 Decimal 对象,最后执行乘法运算并打印结果。
PYTHON
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 对象后相乘并打印结果。

评论

0 条评论,欢迎与作者交流。

正在加载评论...