高精度模板
2022/7/2 23:20:55
本文主要是介绍高精度模板,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <cstring> #include <iostream> #include <vector> struct BigInt { std::vector<char> v; BigInt() { *this = 0; } BigInt(int x) { *this = x; } BigInt &operator=(int x) { v.clear(); do v.push_back(x % 10); while (x /= 10); return *this; } BigInt &operator=(const BigInt &x) { v.resize(x.v.size()); memcpy(const_cast<char *>(v.data()), x.v.data(), x.v.size() * sizeof(char)); return *this; } }; std::ostream &operator<<(std::ostream &out, const BigInt &x) { for (int i = x.v.size() - 1; i >= 0; i--) out << (char)(x.v[i] + '0'); return out; } BigInt operator+(const BigInt &a, const BigInt &b) { BigInt result; result.v.clear(); bool flag = false; for (int i = 0; i < (int)std::max(a.v.size(), b.v.size()); i++) { int tmp = 0; if (i < (int)a.v.size()) tmp += a.v[i]; if (i < (int)b.v.size()) tmp += b.v[i]; if (flag) tmp++, flag = false; if (tmp >= 10) tmp -= 10, flag = true; result.v.push_back(tmp); } if (flag) result.v.push_back(1); return result; } BigInt &operator+=(BigInt &a, const BigInt &b) { return a = a + b; } BigInt operator-(const BigInt &a, const BigInt &b) { BigInt result; result.v.clear(); bool flag = false; for (int i = 0; i < (int)a.v.size(); i++) { int tmp = a.v[i]; if (i < (int)b.v.size()) tmp -= b.v[i]; if (flag) tmp--, flag = false; if (tmp < 0) tmp += 10, flag = true; result.v.push_back(tmp); } int size = result.v.size(); while (size > 1 && result.v[size - 1] == 0) size--; result.v.resize(size); return result; } BigInt operator*(const BigInt &a, const BigInt &b) { BigInt result; result.v.resize(a.v.size() + b.v.size()); for (int i = 0; i < (int)a.v.size(); i++) { for (int j = 0; j < (int)b.v.size(); j++){ result.v[i + j] += a.v[i] * b.v[j]; result.v[i + j + 1] += result.v[i + j] / 10; result.v[i + j] %= 10; } } int size = result.v.size(); while (size > 1 && result.v[size - 1] == 0) size--; result.v.resize(size); return result; }
转自 Menci 的博客 : https://oi.men.ci/bigint-template/
这篇关于高精度模板的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南