高精加
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct Ints{
int f;
long long num[111];
void clr(){
f=0;
for(int i=0;i<=110;i++) num[i]=0;
return ;
}
bool absmlr(const Ints &bb){
for(int i=1;i<=110;i++){
if(num[i]<bb.num[i]){
return 1;
}
if(num[i]>bb.num[i]){
return 0;
}
}
return 0;
}
friend Ints operator+ (const Ints &aa,const Ints &bb){
const int Intsmod=100000;
Ints cc;
Ints aaa=aa;
Ints bbb=bb;
cc.num[110]=0;
//cc.clr();
if(aa.f==bb.f){
for(int i=110;i>=1;i--){
cc.num[i-1]=(aa.num[i]+bb.num[i])/Intsmod;
cc.num[i]+=(aa.num[i]+bb.num[i])%Intsmod;
}
cc.f=bb.f;
}else{
if(aaa.absmlr(bbb)){
for(int i=110;i>=1;i--){
cc.num[i]=(bb.num[i]-aa.num[i]);
}
for(int i=110;i>=1;i--){
if(cc.num[i]<0){
cc.num[i]+=Intsmod,cc.num[i-1]--;
}
}
cc.f=bb.f;
}else if(aa==bb){
cc.clr();
}else{
for(int i=110;i>=1;i--){
cc.num[i]=(aa.num[i]-bb.num[i]);
}
for(int i=110;i>=1;i--){
if(cc.num[i]<0){
cc.num[i]+=Intsmod,cc.num[i-1]--;
}
}
cc.f=aa.f;
}
}
cc.osc();
return cc;
}
friend bool operator== (const Ints aa,const Ints bb){
if(aa.f!=bb.f)
return 0;
for(int i=1;i<=110;i++){
if(aa.num[i]^bb.num[i]){
return 0;
}
}
return 1;
}
void print(){
const int Intsmod=100000;
if(f){
putchar('-');
}
bool bbb=0;
for(int i=1;i<=110;i++){
if(bbb){
printf("%05lld",num[i]);
}
if(num[i]&&!bbb){
bbb=1;
printf("%lld",num[i]);
}
}
if(!bbb) putchar('0');
putchar('\n');
}
void read(){
const int Intsmod=100000;
f=0;
const int tns[]={1,10,100,1000,10000};
char sa[550];
memset(sa,0,sizeof sa);
int ki;
for(ki=1;;){
sa[ki]=getchar();
if(sa[ki]=='-'){
f=1;
continue;
}
if(sa[ki]<'0'||sa[ki]>'9'){
ki--;
break;
}
ki++;
}
int la=ki;
int jj=la,ii=110,js=0;
while(jj>=1&&ii>=1){
num[ii]+=tns[js]*(sa[jj]-'0');
jj--;
js++;
if(js==5) js=0,ii--;
}
}
void osc(){
for(int i=1;i<=110;i++){
if(i!=0)
break;
if(i==110)
f=0;
}
return ;
}
};
Ints a,b;
int main(){
a.read();
b.read();
a=a+b;
a.print();
//b.print();
return 0;
}
本地
但是在lgIDE上完全爆炸