博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QAQ高精度模板笔记√
阅读量:5841 次
发布时间:2019-06-18

本文共 3187 字,大约阅读时间需要 10 分钟。

#include 
#include
#include
#include
#include
using namespace std;const int Bit = 1000000000;const int Max_N = 20010;struct BigNumber { long long num[Max_N]; int len; BigNumber () { len = 0; memset(num, 0, sizeof num); } BigNumber (long long A) { len = 0; while (A) { num[++ len] = A % Bit; A /= Bit; } } void Clear() { len = 0; memset(num, 0, sizeof num); } BigNumber operator = (const BigNumber &A) const { BigNumber ret; ret.len = A.len; for (int i = 1; i <= A.len; ++ i) { ret.num[i] = A.num[i]; } return ret; } BigNumber operator + (const BigNumber &A) const { BigNumber ret; ret.len = max(A.len, len) + 3; for (int i = 1; i <= len; ++ i) { ret.num[i + 1] += (A.num[i] + num[i]) / Bit; ret.num[i] += (A.num[i] + num[i]) % Bit; } while (!ret.num[ret.len] && ret.len) -- ret.len; return ret; } BigNumber operator - (const BigNumber &A) const { BigNumber ret = *this; ret.len = max(len, A.len) + 2; for (int i = 1; i <= A.len; ++ i) { ret.num[i] -= A.num[i]; if (ret.num[i] < 0) { ret.num[i] += Bit; ret.num[i + 1] --; } } while (!ret.num[ret.len] && ret.len) -- ret.len; return ret; } BigNumber operator * (const BigNumber &A) const { BigNumber ret; ret.len = len + A.len + 3; for (int i = 1; i <= len; ++ i) { for (int j = 1; j <= A.len; ++ j) { long long v = 1LL * num[i] * A.num[j] + ret.num[i + j - 1]; ret.num[i + j] += v / Bit; ret.num[i + j - 1] += v % Bit; } } while (!ret.num[ret.len] && ret.len) -- ret.len; return ret; } BigNumber operator / (const int &A) const { BigNumber ret; ret.len = len + 3; for (int i = ret.len; i > 0; -- i) { ret.num[i - 1] = (ret.num[i] + num[i]) % A * Bit; ret.num[i] = (ret.num[i] + num[i]) / A; } ret.num[0] = 0; while (!ret.num[ret.len] && ret.len) -- ret.len; return ret; } void Read() { Clear(); static char S[1000010]; scanf("%s", S + 1); int N = strlen(S + 1); long long Pow = 1; for (int i = N; i; -- i) { if (Pow == 1) ++ len; num[len] += (S[i] - '0') * Pow; Pow *= 10; if (Pow == Bit) Pow = 1; } } void Write() { printf("%lld", num[len]); for (int i = len - 1; i > 0; -- i) { printf("%09lld", num[i]); } }} ;namespace WorkSpace { void Main() { BigNumber A; A.Read(); long long B; scanf("%lld", &B); BigNumber(B).Write(); puts(""); (A * BigNumber(B)).Write(); return ; }}int main() { WorkSpace :: Main(); return 0;}
by yjl

 

 

 

      ——QAQ%%%yjl

 

转载于:https://www.cnblogs.com/gc812/p/5795537.html

你可能感兴趣的文章
java设计模式之——代理模式
查看>>
python中str和repr区别
查看>>
升级win10后无法使用桥接网络解决方法
查看>>
如何进行跨网段的远程唤醒
查看>>
数据挖掘-同比与环比
查看>>
nginx+php详解
查看>>
我的友情链接
查看>>
RedHat6 管理应用服务【11】
查看>>
stm32F10x复习-1
查看>>
20135226黄坤信息安全系统设计基础期末总结
查看>>
轻松快捷创建VSFTP虚拟用户
查看>>
[转]Javascript原型继承
查看>>
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>
分布式系列文章 —— 从 ACID 到 CAP / BASE
查看>>
方法签名与方法重载
查看>>
matlab进行地图仪的绘制
查看>>
Strawberry Perl CPAN Install Module 安装 Module 方法
查看>>
kindeditor.net应用
查看>>
函数preg_replace()与str_replace()
查看>>