加:
#include <cstdio>
#include <cstring>
using namespace std;
char c1[505],c2[505];
int a[505],b[505],c[505];
int max(int a,int b){return a>b?a:b;}
int main(){
scanf("%s",c1);scanf("%s",c2);//printf("%s %s",c1,c2);
if(c1[0]==48&&c2[0]==48){printf("0");return 0;}
int len1=strlen(c1);int len2=strlen(c2);
for(int i=0;i<len1;i++)a[len1-i-1]=int(c1[i]-48);
for(int i=0;i<len2;i++)b[len2-i-1]=int(c2[i]-48);
//printf("%d %d",a[0],b[0]);
int maxx=max(len1,len2);
for(int i=0;i<maxx;i++){
c[i]+=a[i]+b[i];
while(c[i]>=10){c[i+1]++;c[i]-=10;}
}
maxx++;
while(c[maxx]==0)maxx--;
for(int i=maxx;i>=0;i--)printf("%d",c[i]);
return 0;
}
减:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
string a,b,c;
int d[10005];
bool pd,ling=1;
int main(){
cin >> a >> b;
int lena = a.length();
int lenb = b.length();
if(a==b){printf("0");return 0;}
if(lena>lenb)pd=1;
else if(lena<lenb)pd=0;
else {
if(a>b)pd=1;
else pd=0;
}
if(!pd)swap(a,b);
int m=a.length()-b.length();
for(int i=1;i<=m;i++)c=c+"0";
b=c+b;
for(int i=a.length()-1;i>=0;i--){
if(a[i]>=b[i])d[i]=a[i]-b[i];
else{
a[i-1]--;
d[i]=a[i]+10-b[i];
}
}
if(!pd)printf("-");
for(int i=0;i<=a.length()-1;i++){
if(ling && d[i]==0)continue;
else if(d[i]>0)ling=0;
printf("%d",d[i]);
}
return 0;
}
乘:
#include <cstdio>
#include <cstring>
using namespace std;
int a[2005],b[2005],c[4005];
char s1[2005],s2[2005];
int main(){
scanf("%s%s",s1,s2);
a[0]=strlen(s1);b[0]=strlen(s2);
for(int i=1;i<=a[0];i++)a[i]=s1[a[0]-i]-48;
for(int i=1;i<=b[0];i++)b[i]=s2[b[0]-i]-48;
c[0]=a[0]+b[0]-1;
for(int i=1;i<=b[0];i++)
for(int j=1;j<=a[0];j++){
c[i+j-1]+=a[j]*b[i];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
if(c[c[0]+1]>0)c[0]++;
while(c[c[0]]==0&&c[0]>1)c[0]--;
for(int i=c[0];i>=1;i--)printf("%d",c[i]);
return 0;
}
高精度加减乘
2019-05-10