高精加
http://codevs.cn/problem/3116/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=5000;
char aa[maxn],bb[maxn];
int a[maxn],b[maxn],c[maxn];
int main(){
cin>>aa;cin>>bb;
int la=strlen(aa);
int lb=strlen(bb);
for(int i=0;i<la;i++) a[la-i-1]=aa[i]-'0';
for(int i=0;i<lb;i++) b[lb-i-1]=bb[i]-'0';
int lc=max(la,lb);
for(int i=0;i<lc;i++) {
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/10,c[i]%=10;
}
if(c[lc]) lc++;
for(int i=lc-1;i>=0;i--) printf("%d",c[i]);
return 0;
}
高精减
http://codevs.cn/problem/3115/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=5000;
char aa[maxn],bb[maxn];
int a[maxn],b[maxn],c[maxn];
int main(){
cin>>aa;cin>>bb;
int la=strlen(aa);
int lb=strlen(bb);
if(la<lb||(la==lb&&strcmp(aa,bb)<0)) swap(aa,bb),swap(la,lb),cout<<"-";
for(int i=0;i<la;i++) a[la-i-1]=aa[i]-'0';
for(int i=0;i<lb;i++) b[lb-i-1]=bb[i]-'0';
int lc=max(la,lb);
for(int i=0;i<lc;i++) c[i]=a[i]-b[i];
for(int i=0;i<lc;i++){
if(c[i]<0){
c[i]+=10;
c[i+1]-=1;
}
}
while(!c[lc-1]&&lc>1) lc--;
for(int i=lc-1;i>=0;i--) printf("%d",c[i]);
return 0;
}
高精乘
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char ai[508];
int a[1000],b[1000];
long long c[100000];
int main(){
cin>>ai;
int la=strlen(ai);
for(int i=0;i<la;i++) a[la-i-1]=ai[i]-'0';
cin>>ai;
int lb=strlen(ai);
for(int i=0;i<lb;i++) b[lb-i-1]=ai[i]-'0';
for(int i=0;i<la;i++){
for(int j=0;j<lb;j++)
c[i+j]+=a[i]*b[j];
}
for(int i=0;i<la+lb;i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
bool flag=1;
for(int i=la+lb;i>=0;i--){
if(c[i]==0&&flag) continue;
flag=0;
printf("%d",c[i]);
}
return 0;
}