『模板 高精度计算』
<更新提示>
<第一次更新>
<正文>
高精度计算#
在计数类题目或者有些最优解题目中,需要输出的答案很可能会爆longlong,这时候就需要用到高精度了。高精度计算较为简单,不再讲解,以下给出辅助常用的高精度计算模板:支持正整数的加,减,乘运算,读入输出,比较,以1e8压位计算,结构体封装。
Code:
#include<bits/stdc++.h>
using namespace std;
const int base=1e8,Maxlen=1e4;
struct bign
{
int d[Maxlen],len;
inline void clear(void)
{
len=0;
memset(d,0,sizeof d);
}
inline void print(void)
{
printf("%d",d[len]);
for(int i=len-1;i>=1;i--)
printf("%08d",d[i]);
}
inline bign read(void)
{
clear();
char s[5000];
scanf("%s",s);
int last=strlen(s)-1,temp;
while(last>=7)
{
temp=0;
for(int i=last-8+1;i<=last;i++)
temp=temp*10+s[i]-'0';
d[++len]=temp;
last-=8;
}
temp=0;
for(int i=0;i<=last;i++)
temp=temp*10+s[i]-'0';
d[++len]=temp;
while(!d[len]&&len>1)len--;
return *this;
}
bign operator = (int a)
{
clear();
do
{
d[++len]=a%base;
a/=base;
}
while(a);
return *this;
}
bign operator * (bign a)
{
bign res;
res.clear();
long long temp;
for(int i=1;i<=len;i++)
{
temp=0;
for(int j=1;j<=a.len;j++)
{
temp+=1LL*d[i]*a.d[j]+res.d[i+j-1];
res.d[i+j-1]=temp%base;
temp/=base;
}
if(temp)
res.d[i+a.len]=temp;
}
res.len=len+a.len;
while(!res.d[res.len]&&res.len>1)res.len--;
return res;
}
bign operator + (bign a)
{
for(int i=1;i<=max(a.len,len);i++)
{
d[i]+=a.d[i];
d[i+1]+=d[i]/base;
d[i]%=base;
}
len=max(a.len,len)+5;
while(!d[len]&&len>1)len--;
return *this;
}
bign operator - (bign a)
{
for(int i=1;i<=len;i++)
{
d[i]-=a.d[i];
if(d[i]<0)d[i+1]--,d[i]+=base;
}
while(!d[len]&&len>1)len--;
return *this;
}
bool operator < (const bign a)const
{
if(a.len^len)
return len<a.len;
for(int i=len;i>=1;i--)
if(d[i]^a.d[i])
return d[i]<a.d[i];
return false;
}
};
<后记>
分类:
其他算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9中的异常处理性能提升分析:为什么过去慢,未来快
· 字符集、编码的前世今生
· Web性能优化:从 2 秒到200毫秒
· WPF 使用GDI+提取图片主色调并生成Mica材质特效背景
· golang遍历处理map时的常见性能陷阱
· 1 分钟生成架构图?程序员 AI 绘图保姆级教程
· 一种更简单的方式运行 C# 代码,简化 C# 开发体验!
· 最快的流媒体服务器搭建 smart_rtmpd
· 高并发下如何防止商品超卖?
· 阿里也出手了!灵码AI IDE问世