#include #include using namespace std; int mabna = 1000000; vector one,zero; void print(vector a); vector sum(vector a,vector b){ vector result; result.resize(max(a.size(),b.size())); for(int i=0;ib.size()) for(int i=b.size();ia.size()) for(int i=a.size();i mult(vector a,vector b){ vector result; for(int i=0;i sub; for(int j=0;j pow(vector a,int p){ if(a.size()==0 or a==zero) return zero; if(p==0) return one; if(p%2) return mult(pow(mult(a,a),p/2),a); else return pow(mult(a,a),p/2); } void print(vector a){ int start = a.size()-1; while(start>0 and a[start]==0) start--; for(int i=start;i>=0;i--){ long long x=a[i]; if(x==0) x=1; while(x<99999 and i!=start){ cout<<0; x*=10; } cout< &a,string s){ for(int i=s.size()-1;i-5>=0;i-=6){ int x=0; int step=1; for(int j=i;j>=i-5;j--){ x+=(s[j]-'0')*step; step*=10; } a.push_back(x); } if(s.size()%6){ int x=0; int t=(s.size()/6)*6; int step=1; for(int j=s.size()-t-1;j>=0;j--){ x+=(s[j]-'0')*step; step*=10; } a.push_back(x); } } int main(){ one.push_back(1); zero.push_back(0); string aa,bb; long p; char type; while(cin>>type){ vector a; vector b; if(type=='+'){ cin>>aa>>bb; strtobig(a,aa); strtobig(b,bb); print(sum(a,b)); } else if(type=='*'){ cin>>aa>>bb; strtobig(a,aa); strtobig(b,bb); print(mult(a,b)); } else if(type=='^'){ cin>>aa; cin>>p; strtobig(a,aa); print(pow(a,p)); } } return 0; }