主页
搜索
最近更新
数据统计
申请密钥
批量保存
系统公告
1
/
1
请查看完所有公告
P1919 高精度乘法 | A*B Problem 升级版 题解
最后更新于 2025-07-03 16:36:38
作者
Kevin1211
分类
题解
题解
P1919
复制 Markdown
查看原文
删除文章
更新内容
## 题目分析 要求计算两个超大正整数的乘积。普通的高精度乘法( $O(n^2)$ 复杂度)无法在合理时间内完成,提示需要使用FFT(快速傅里叶变换)或分治乘法等高效算法。 但是我们可以使用Python~~偷鸡~~! ## Decimal高精度法 ### 方法思路 虽然题目建议使用FFT,但Python的 `decimal` 模块通过调整精度设置也能处理超大数乘法,直接利用Python内置的高精度计算能力,避免了手动实现复杂算法,~~所以Python真是好东西啊~~。 1. **解除系统限制**: `sys.set_int_max_str_digits(1000000)` 将整数转字符串的最大位数提高到1,000,000位 2. **设置高精度环境**: `prec=2000000` 确保计算精度足够处理百万位数字 3. **读取输入**:直接从标准输入读取两个大数,转换为Decimal对象 ### Code ```python import sys from decimal import * sys.set_int_max_str_digits(1000000) # 解除字符串转换限制 setcontext(Context(prec=2000000, Emax=2000000, Emin=0)) # 设置200万位精度 # 读入a,b a = Decimal(sys.stdin.readline().strip()) b = Decimal(sys.stdin.readline().strip()) print(a * b) ``` 是的你没看错,只有 $7$ 行。 如果我们把语法简化一下: 欸,只有 $5$ 行了! ```python import sys from decimal import * sys.set_int_max_str_digits(100000) setcontext(Context(prec=2000000,Emax=2000000,Emin=0)) print((Decimal(sys.stdin.readline())*Decimal(sys.stdin.readline()))) ``` ~~当然Python是不分行的,你可以合到一起那就只有一行了。~~
正在渲染内容...
点赞
0
收藏
0