1.高精度
首先,需要3个数组,$a[ i]$ $b[i]$ 分别储存输入的$a,b$($a,b$以字符串读入)
最后,倒序输出即可
#include<bits/stdc++.h>
using namespace std;
int a[10000], b[10000], c[10000];//分别储存
string A, B;
int main(){
cin>>A>>B;
int q=1, w=1;
int len=max(A.size(), B.size());
for(int i=A.size()-1;i>=0;i--){
a[q]=A[i]-'0';
q++;
}
for(int i=B.size()-1;i>=0;i--){
b[w]=B[i]-'0';
w++;
}//分别处理
for(int i=1;i<=max(q,w);i++){
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}//计算
if(c[len+1]){
len++;
}
for(int i=len;i>=1;i--){
cout<<c[i];
}//输出
return 0;
}
1-2 高精度减法
按照减法规则模拟即可
#include<bits/stdc++.h>
using namespace std;
int A[100000], B[100000], C[100000];
string a, b;
int main(){
cin>>a>>b;
int q=1, w=1;
if(a.size()<b.size()){
swap(a, b);
C[0]=-1;
}else if(a.size()==b.size()){
if(a<b){
swap(a, b);
C[0]=-1;
}
}
int len=a.size();
for(int i=a.size()-1;i>=0;i--){
A[q]=a[i]-'0';
q++;
}
for(int i=b.size()-1;i>=0;i--){
B[w]=b[i]-'0';
w++;
}
for(int i=1;i<=len;i++){
C[i]+=A[i]-B[i];
if(C[i]<0){
C[i+1]-=1;
C[i]+=10;
}
}
if(C[0]==-1){
cout<<"-";
}
int count=0;
for(int i=len;i>=1;i--){
if(C[i]==0){
count++;
}
if(count==len){
cout<<0;
return 0;
}
}
for(int i=len;i>=1;i--){
cout<<C[i];
}
return 0;
}
1-3 高精度乘法
其计算方法是
$$
c[i+j]=c[i+j]+A[i] * B[j]
$$
然后就是基操
#include<bits/stdc++.h>
using namespace std;
long long c[30000]={0};
long long A[10000], B[10000];
int main() {
string a, b;
cin>>a>>b;
int q=0, w=0;
for(int i=a.size()-1; i>=0; i--) {
A[w]=a[i]-'0';
w++;
}
for(int i=b.size()-1; i>=0; i--) {
B[q]=b[i]-'0';
q++;
}
for(int i=0; i<=w; i++) {
for(int j=0; j<=q; j++) {
c[i+j]+=A[i]*B[j];//计算贡献
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
}
int m=a.size()+b.size();
for(; !c[m]&&m>=1;) {
m--;
}
for(int i=m; i>=0; i--) {
cout<<c[i];
}
return 0;
}
1-4 高精度除法*
高精度$/$单精度
string mul(string x,string y) {
int a[maxn],b[maxn],c[maxn];
string ans;
int lena=x.length(),lenb=y.length(),len=lena+lenb-1;
for(int i=0; i<lena; i++) a[lena-i-1]=x[i]-'0';
for(int i=0; i<lenb; i++) b[lenb-i-1]=y[i]-'0';
for(int i=0; i<lena; i++)
for(int j=0; j<lenb; j++)
c[i+j]+=a[i]*b[j];
int temp=0;
for(int i=0; i<len; i++) {
c[i]+=temp;
temp=c[i]/10;
c[i]%=10;
}
while(temp) c[len++]=temp%10,temp/=10;
while(!c[len-1] && len>1) len--;
for(int i=len-1; i>=0; i--) ans+=c[i]+'0';
return ans;
}