大数加法
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const ll inf=1e9+10;
const int maxc=1e5+10;
const int mod=1000000007;
char a[maxc],b[maxc];
int ans[maxc],aaa[maxc],bbb[maxc];
int aa,bb;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>a>>b;
aa=strlen(a);
bb=strlen(b);
int len=max(aa,bb);
for(int i=0;i<=len;i++)
{
if(aa-i-1>=0) aaa[i]=a[aa-i-1]-'0';
else aaa[i]=0;
if(bb-i-1>=0) bbb[i]=b[bb-i-1]-'0';
else bbb[i]=0;
}
int rest=0;
for(int i=0;i<len;i++)
{
ans[i]=aaa[i]+bbb[i]+rest;
if(ans[i]>9)
{
rest=ans[i]/10;
ans[i]%=10;
}
else reat=0;
}
if(rest!=0) ans[len++]=rest;
for(int i=len-1;i>=0;i--)
cout<<ans[i];
cout<<endl;
return 0;
}
大数减法
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const ll inf=1e9+10;
const int maxc=1e5+10;
const int mod=1000000007;
char a[maxc]; //被减数
char b[maxc]; //减数
int aa,bb;
int big[maxc];
int small[maxc];
int ans[maxc];
void change(int maxx)
{
if(maxx>0)
{
for(int i=0;i<aa;i++) big[i]=a[aa-i-1]-'0';
for(int i=0;i<bb;i++) small[i]=b[bb-i-1]-'0';
for(int i=bb;i<aa;i++) small[i]=0;
}
else
{
for(int i=0;i<bb;i++) big[i]=b[bb-i-1]-'0';
for(int i=0;i<aa;i++) small[i]=a[aa-i-1]-'0';
for(int i=aa;i<bb;i++) small[i]=0;
}
}
void bigint_xiangjian(int maxx)
{
change(maxx);
int len=max(aa,bb);
for(int i=0;i<len;i++)
{
ans[i]=big[i]-small[i];
if(ans[i]<0)
{
ans[i]+=10;
big[i+1]-=1;
}
}
while(ans[len-1]==0&&len!=1) len--; //去除前导0
for(int i=len-1;i>=0;i--) cout<<ans[i];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>a>>b;
aa=strlen(a);
bb=strlen(b);
int maxx=strcmp(a,b);
if(maxx==0){
cout<<"0"<<endl;
exit(0);
}
else
{
if(aa>bb) maxx=1;
else if(bb>aa) maxx=-1;
}
if(maxx<0) cout<<"-"; //若为负数,输出负号
bigint_xiangjian(maxx);
return 0;
}