高精度模板
明天考恩欧挨批,但是我今天才学高精度:)
随便敲敲
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxx=1e5+5;
string a,b;int ans[maxx];
inline void add(string xx,string yy){
memset(ans,0,sizeof(ans));
int lenx=xx.length(),leny=yy.length();
int maxlen=max(lenx,leny);
int x[maxlen+1],y[maxlen+1];
memset(x,0,sizeof(x));memset(y,0,sizeof(y));
//赋初值为0,否则会出错
for(int i=1;i<=lenx;i++) x[i]=xx[lenx-i]-'0';
for(int i=1;i<=leny;i++) y[i]=yy[leny-i]-'0';
int k=0,len=0;//k记录借位,len记录答案长度
for(int i=1;i<=lenx||i<=leny;i++){
ans[i]=x[i]+y[i]+k;
k=ans[i]/10;
ans[i]%=10;
len++;
}
ans[++len]=k;//最后再进一位
while(!ans[len]&&len>1) len--;
//删除前导0,注意len最小为1(即和为0的情况)
for(int i=len;i>=1;i--) cout<<ans[i];
cout<<endl;
return;
}
inline void sub(string xx,string yy){
memset(ans,0,sizeof(ans));
int lenx=xx.length(),leny=yy.length();
int maxlen=max(lenx,leny);
int x[maxlen+1],y[maxlen+1];
memset(x,0,sizeof(x));memset(y,0,sizeof(y));
//这里必须赋初值,否则做减法时会出错
if(lenx<leny||(lenx==leny&&xx<yy)){
cout<<"-";swap(xx,yy);swap(lenx,leny);
}//注意lenx和leny也需要交换
for(int i=1;i<=lenx;i++) x[i]=xx[lenx-i]-'0';
for(int i=1;i<=leny;i++) y[i]=yy[leny-i]-'0';
int len=0;//记录答案长度
for(int i=1;i<=lenx;i++){
if(x[i]-y[i]<0) x[i]+=10,x[i+1]--;
ans[i]=x[i]-y[i];len++;
}
while(ans[len]==0&&len>1) len--;
for(int i=len;i>=1;i--) cout<<ans[i];
cout<<endl;return;
}
inline void mul(string xx,string yy){
memset(ans,0,sizeof(ans));
int lenx=xx.length(),leny=yy.length();
int x[lenx+1],y[leny+1];
for(int i=1;i<=lenx;i++) x[i]=xx[lenx-i]-'0';
for(int i=1;i<=leny;i++) y[i]=yy[leny-i]-'0';
int k=0,len=lenx+leny;
for(int i=1;i<=lenx;i++){
for(int j=1;j<=leny;j++){
ans[i+j-1]+=x[i]*y[j]+k;
k=ans[i+j-1]/10;
ans[i+j-1]%=10;
}
ans[leny+i]+=k;k=0;
}
while(!ans[len]&&len>1) len--;
for(int i=len;i>=1;i--) cout<<ans[i];
cout<<endl;return;
}
inline void div(string xx,int y){
memset(ans,0,sizeof(ans));
int lenx=xx.length();
int x[lenx+1];
for(int i=1;i<=lenx;i++) x[i]=xx[i-1]-'0';
int k=0,len=1;
for(int i=1;i<=lenx;i++){
ans[i]=(k*10+x[i])/y;
k=(k*10+x[i])%y;
}
while(ans[len]==0&&len<lenx) len++;
for(int i=len;i<=lenx;i++) cout<<ans[i];cout<<endl<<k;
cout<<endl;return;
}
signed main(){
cin>>a>>b;int bb=0;//注意给变量赋初值
for(int i=0;i<=b.length()-1;i++)
bb=bb*10+b[i]-'0';//预处理低精除数
add(a,b);sub(a,b);mul(a,b);div(a,bb);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效