高精度加法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
int main(){
int x,y,c[510],i,j,k=0,jw=0;
char a[510],b[510];
memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c));
scanf("%s",a); scanf("%s",b);
i=strlen(a)-1; j=strlen(b)-1;
while(j>=0||i>=0){
if(i>=0){jw=(a[i]-'0')+jw;i--;}
if(j>=0){jw=(b[j]-'0')+jw;j--;}
c[k++]=jw%10;
jw=jw/10;
}
k--;
for(i=k;i>=0;i--) printf("%d",c[i]);
return 0;
}
高精度减法
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[510],b[510];
int c[510],i=0,j=0,k=0,x=0,y=0,tw=0;
int main(){
freopen("3115.in","r",stdin);
freopen("3115.out","w",stdout);
scanf("%s",a);scanf("%s",b);
x=strlen(a);y=strlen(b);
a[x]='\0';b[y]='\0';
if(x<y){
printf("-");
swap(a,b);
}
else if(x==y){
k=1;
for(j=0;j<x;j++)
if(a[j]<b[j]) {
k=0;break;
}
if(k==0){
printf("-");
swap(a,b);
}
}
k=0;
i=strlen(a)-1; j=strlen(b)-1;
while(i>=0){
if(j<0) {
if((a[i]-'0')<0){
a[i-1]--;
c[k]=10+(a[i]-'0');
k++;i--;
}
else c[k]=(a[i]-'0');k++;i--;
}
else {
if(a[i]>=b[j]){
c[k]=(a[i]-'0')-(b[j]-'0');
k++;i--;j--;
}
else{
a[i-1]--;
c[k]=10+(a[i]-'0')-(b[j]-'0');
k++;i--;j--;
}
}
}
k--;int fz=0;
for(i=k;i>=0;i--) if(c[i]!=0||fz==1){
printf("%d",c[i]);fz=1;
}
return 0;
}