代码:
#include<bits/stdc++.h>
using namespace std;
const int SIZE=10010;
struct Int{
int len,n[SIZE];
void Set(int l){
len=l;
for(int i=1;i<=len;i++) n[i]=0;
}
Int(char *s){
len=strlen(s);
for(int i=len-1;~i;i--){
if(s[i]<='9'&&s[i]>='0'){
len=i+1;
break;
}
}
for(int i=len;i>=1;i--) n[i]=s[len-i]-'0';
}
Int(long long x=0){
len=0;
do{
n[++len]=x%10;
x/=10;
}while(x);
}
bool operator < (const Int b){
if(len!=b.len) return len<b.len;
for(int i=len;i;i--)
if(n[i]!=b.n[i]) return n[i]<b.n[i];
return 0;
}
Int operator + (const Int b){
Int ans;
ans.Set(max(len,b.len)+1);
for(int i=1;i<=ans.len;i++){
if(i<=len) ans.n[i]+=n[i];
if(i<=b.len) ans.n[i]+=b.n[i];
ans.n[i+1]+=ans.n[i]/10;
ans.n[i]%=10;
}
while(ans.n[ans.len]==0&&ans.len>1) ans.len--;
return ans;
}
Int operator - (const Int b){
Int ans,a=*(this );ans.Set(len);
for(int i=1;i<=ans.len;i++){
if(a.n[i]<b.n[i]) a.n[i]+=10,a.n[i+1]--;
ans.n[i]=a.n[i]-(i>b.len?0:b.n[i]);
}
while(ans.n[ans.len]==0&&ans.len>1) ans.len--;
return ans;
}
Int operator * (const Int b){
Int ans;
ans.Set(len+b.len);
for(int i=1;i<=len;i++){
for(int j=1;j<=b.len;j++){
ans.n[i+j-1]+=n[i]*b.n[i];
ans.n[i+j]+=ans.n[i+j-1]/10;
ans.n[i+j-1]%=10;
}
}
while(ans.n[ans.len]==0&&ans.len>1) ans.len--;
return ans;
}
Int operator / (const int &b){
if((*this)<Int(b)) return Int(0LL);
Int ans;
ans.len=len;
int r=0;
for(int i=ans.len;i;i--){
r=r*10+n[i];
ans.n[i]=r/b;
r%=10;
}
while(ans.n[ans.len]==0&&ans.len>1) ans.len--;
return ans;
}
Int operator / (const Int b){
if((*this)<b) return Int(0LL);
Int ans;
ans.Set(len-b.len+1);
for(int i=ans.len;i;i--){
for(int j=1;j<=9;j++){
ans.n[i]++;
if((*this)<(ans*b)){
ans.n[i]--;
break;
}
}
}
while(ans.n[ans.len]==0&&ans.len>1) ans.len--;
return ans;
}
void print(){
for(int i=len;i;i--)
printf("%d",n[i]);
printf("\n");
}
};
int main(){
char aa[100010],bb[100010],x;
cin>>aa>>x>>bb;
Int a=aa,b=bb,ans;
if(x=='+') ans=a+b;
if(x=='-') ans=a-b;
if(x=='*') ans=a*b;
if(x=='/') ans=a/b;
ans.print();
return 0;
}