当前位置: 首页 > news >正文

学习笔记:压位高精

考虑 10-base 高精度,单次运算复杂度为 \(O(\log_{10}V)\)。使用 10-base 的主要原因是 std::to_string 很方便、输出也很简单。

但效率太低。实际上,一般打高精度都是 1e4-base,或更激进地,1e9-base。

注意高精乘低精是 \(O(len)\) 而非 \(O(len^2)\)

需要考虑输出。由于用的是 10-power 作为 base,所以只需要把每四位直接输出即可。注意除首位外需要补前导 0 直到四位。

struct BI {std::vector<int> s;BI() {}BI(int x) {for (; x; s.push_back(x % 10000), x /= 10000);return;}BI& operator= (int q) {return *this = (BI)q;}bool operator> (const BI &q) {if (s.size() != q.s.size())return s.size() > q.s.size();for (int i = (int)s.size() - 1; ~i; --i)if (s[i] != q.s[i])return s[i] > q.s[i];return 0;}BI operator* (int q) const {int lx = s.size();std::vector<long long> res(lx + 3);for (int i = 0; i < lx; ++i)res[i] = (long long)s[i] * q;BI p;for (int j = 0; j < lx + 2; ++j)res[j + 1] += res[j] / 10000, res[j] %= 10000;int len = lx + 2;for (; ~len && !res[len]; --len);for (int j = 0; j <= len; ++j)p.s.push_back(res[j]);return p;}void out(void) {for (int i = (int)s.size() - 1; ~i; --i) {auto p = std::to_string(s[i]);if (i != (int)s.size() - 1)for (; (int)p.size() < 4; p = "0" + p);std::cout << p;}std::cout << '\n';return;}
};
http://www.zskr.cn/news/15290.html

相关文章:

  • 近期杂题
  • 并查集 D. Shark [Codeforces Round 484(Div. 2)]
  • Hackersdaddy ROUGE CTF 2025 完整解题记录
  • AI元人文系列:透明推理者——下一代大模型架构设计
  • 实用指南:【C语言】char * 、char [ ]、const char * 和 void *的使用以及区别
  • 实用指南:1、docker入门简介
  • 调试parlant的大模型配置,最终自己动手写了g4f的模块挂载 - 教程
  • unity面向组合开发二:EC的代码实践
  • airsim多无人机+无人车联合仿真辅导 - 教程
  • CSP-JF36
  • 【进入便捷的系统不解决问题】ubuntu开机出现‘系统出错且无法恢复。请联系系统管理员’
  • QOJ #8147. Math Exam 题解
  • 国庆梦熊集训做题记录
  • 兰博平台: 星云抽卡豪华版. 作者acc177
  • AT_abc315_f [ABC315F] Shortcuts
  • 问题表 - microsoft
  • 随想八
  • SolarWinds Web Help Desk远程代码执行漏洞分析
  • Aria2安装
  • 正则表达式学习
  • 神经网络之简单的标量何以表达模型的拟合能力 - 指南
  • 一篇文章入门RabbitMQ:基本概念与Java利用
  • PHP程序员要是基础不扎实,越学越吃力
  • 《电路基础》第七章学习笔记
  • LLM大模型:deepseek sparse attention是个啥?
  • 微信公众号推文添加附件方法,1分钟学会!支持word,excel,pdf等适合招聘,公告,申请表等
  • 2025国庆Day2
  • vue - 实战3 - 后端
  • P11983 [JOIST 2025] 展览会 3 题解
  • 黑客马拉松(Hackathon)