学习目标:
高精度算法
学习内容:
- 掌握条件语句
- 高精度和低精度
学习产出:
高精乘
#include <bits/stdc++.h>
using namespace std;
const int N=1e5;
string x,y;
int a[N],b[N],c[N],la,lb,lc;
int main(){
cin>>x>>y;
la=x.length();
lb=y.length();
for(int i=0;i<la;i++){
a[la-i]=x[i]-'0';
}
for(int i=0;i<lb;i++){
b[lb-i]=y[i]-'0';
}
for(int i=1;i<=la;i++){
for(int j=1;j<=lb;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
lc=la+lb;
while(c[lc]==0&&lc>1) lc--;//消除0,并且当结果为领的时候保留;
for(int i=lc;i>=1;i--) cout<<c[i];
return 0;
}
高精减
#include <bits/stdc++.h>
using namespace std;
const int N=1e5;
string x,y;
int a[N],b[N],c[N],la,lb,lc;
int main(){
cin>>x>>y;
la=x.length();
lb=y.length();
if(la<lb||(la==lb&&x<y)){//判断是小数-大数
swap(x,y);
swap(la,lb);
cout<<"-";
}
for(int i=0;i<la;i++) a[la-i]=x[i]-'0';
for(int i=0;i<lb;i++) b[lb-i]=y[i]-'0';
lc=max(la,lb);
for(int i=1;i<=lc;i++){
if(a[i]<b[i]){//借位-1
a[i]+=10;
a[i+1]--;
}
c[i]=a[i]-b[i];
}
while(c[lc]==0&&lc>1) lc--;//消除0,并且当结果为领的时候保留;
for(int i=lc;i>=1;i--) cout<<c[i];
return 0;
}
高精加
#include <bits/stdc++.h>
using namespace std;
const int N=1e5;
string x,y;
int a[N],b[N],c[N],la,lb,lc;
int main(){
cin>>x>>y;
la=x.length();
lb=y.length();
for(int i=0;i<la;i++) a[la-i]=x[i]-'0';
for(int i=0;i<lb;i++) b[lb-i]=y[i]-'0';
lc=max(la,lb);
for(int i=1;i<=lc;i++){
c[i] +=a[i]+b[i];
c[i+1]=c[i]/10;
c[i] %=10;
}
if(c[lc+1]>0) lc++;//补长度
for(int i=lc;i>=1;i--) cout<<c[i];
return 0;
}