#include
#include
#include
typedef vector
vector
vector
char you[8][8]={{'<','<','<','<','>','e','<','>'}, // +
{'<','<','<','<','>','e','<','>'}, // -
{'>','>','<','<','>','e','<','>'}, // *
{'>','>','<','<','>','e','<','>'}, // /
{'>','>','>','>','>','e','e','>'}, // (
{'<','<','<','<','=','e','<','e'}, // )
{'>','>','>','>','>','e','<','>'}, // ^
{'e','e','e','e','e','e','e','e'}}; // #
char yun[8] = {'+','-','*','/','(',')','^','#'};
long top=0,i=0;
ifstream fin("D:\\group.txt");
ofstream fout("D:\\answer.txt");
char bijiao(char x,char y);
void jia(vector
void jian(vector
void cheng(vector
void chu(vector
void cifang(vector
void shuan(char ch);
void shuchu(vector
bool dengjia(vector
//main procedure begins here.
main(){
char c,w;
bool b=false;
fu.push_back('#');
fin>>c;
while (c!='#'){
if (c>='0'&&c<='9'){
vector
tmp.push_back(1);
while(c>='0'&&c<='9'){
tmp.push_back(c-'0');
fin>>c;
}
i++;
shu.push_back(tmp);
continue;
}else{
if (c=='-'&&b){
vector
fin>>c;
tmp.push_back(-1);
while(c>='0'&&c<='9'){
tmp.push_back(c-'0');
fin>>c;
}
i++;
shu.push_back(tmp);
fu.pop_back();
top--;
fin>>c;
continue;
}
b=(c=='(') ? true:false;
w=fu[top];
while (bijiao(c,w)=='<'){
shuan(w);
top--;
w=fu[top];
fu.pop_back();
}
if (bijiao(c,w)=='>'){
top++;
fu.push_back(c);
fin>>c;
continue;
}
if (bijiao(c,w)=='='){
fu.pop_back();
top--;
fin>>c;
continue;
}
}
}
fin.close();
w=fu[top];
while (w!='#'){
shuan(w);
top--;
w=fu[top];
}
shuchu(shu[0]);
fout.close();
}
//main procedure ends here.
//bijiao procedure here it returns two operators you xian ji
char bijiao(char x,char y){
int i=0,j=0;
while (yun[i]!=x) i++;
while (yun[j]!=y) j++;
return you[i][j];
}
//deng jia function here it compares two vector
bool dengjia(vector
int c1,c2,j,i;
c1=ve1.size()-1;
c2=ve2.size()-1;
if (c1!=c2) return false;
else{
for(i=0;((ve1[i]==ve2[i])&&(i
else return false;
}
}
//shu chu here it shu chu the final answer
void shuchu(vector
int i,j=ve.size();
if (ve[0]==-1) fout<<'-';
for (i=1;i<=j-1;i++) fout<
//jia fa here it adds two numbers
void jia(vector
int c1,c2,j,i,c,d;
vector
c1=ve1.size()-1;
c2=ve2.size()-1;
d=(c1
j=0;
if(ve1[0]*ve2[0]<0){ //yi hao
if (ve1[0]==-1){
ve1[0]=1;
jian(ve1,ve2);
ve1[0]*=-1;
}else{
ve2[0]=1;
jian(ve1,ve2);
}
}else{ //tong hao
v.push_back(ve1[0]);
while((c!=0)&&(d!=0)){
v.push_back((ve1[c1]+ve2[c2]+j)%10);
j=(ve1[c1]+ve2[c2]+j)/10;
c--; d--; c1--; c2--;
}
if (ve1.size()
v.push_back((ve2[c]+j)%10);
j=(ve2[c]+j)/10;
c--;
}
if (c>0) for (;c>0;c--) v.push_back(ve2[c]);
else v.push_back(j);
}else if(ve1.size()>ve2.size()){
while ((j!=0)&&(c>0)){
v.push_back((ve1[c]+j)%10);
j=(ve1[c]+j)/10;
c--;
}
if (c>0) while (c>0){
v.push_back(ve1[c]);
c-- ;
}
else v.push_back(j);
}else if (j!=0) v.push_back(j);
i=v.size()-1; tmp.push_back(v[0]);
while (i>0){
tmp.push_back(v[i]);
i--;
}
ve1=tmp;
}
}
//jian fa here
void jian(vector
int c1,c2,j,i;
bool big;
vector
c1=ve1.size()-1;
c2=ve2.size()-1;
if(ve1[0]*ve2[0]<0){ //yi hao
if (ve1[0]==-1){
ve2[0]=-1;
jia(ve1,ve2);
}else{
ve2[0]=1;
jia(ve1,ve2);
}
}else{ //tong hao
if (c1>c2) big=true; //bi jiao da xiao
else if (c1
for(i=1;ve1[i]==ve2[i];i++);
if (ve1[i]>ve2[i]) big=true;
else big=false;
}
if (big){ //ve1 is larger
i=c1; j=c2;
while (j>0){
if (ve1[i]>=ve2[j]) ve1[i]-=ve2[j];
else{
int it=i-1;
while (ve1[it]==0) it--;
ve1[it]--; it++;
while(it ve1[it]=9;
it++;
}
ve1[i]=ve1[i]+10-ve2[j];
}
i--; j--;
}
}else{ // ve2 is larger
i=c1; j=c2;
while (i>0){
if (ve2[j]>=ve1[i]) ve2[j]-=ve1[i];
else{
int it=i-1;
while (ve2[it]==0) i--;
ve2[it]--; it++;
while(it
it++;
}
ve2[j]=ve2[j]+10-ve1[i];
}
i--; j--;
}
ve1=ve2; ve1[0]*=-1;
}
}
j=ve1.size()-1;
i=1;
while((ve1[i]==0)&&(i
if ((i==j)&&(ve1[i]==0)){
tmp[0]=1; tmp.push_back(0);
}else for (;i<=j;i++) tmp.push_back(ve1[i]);
ve1=tmp;
}
//cheng fa here
void cheng(vector
int c1,c2,i,t;
vector
c1=ve1.size()-1;
c2=ve2.size()-1;
tmp.push_back(1);
for (t=c2;t>0;t--){
int ct=ve2[t],it,j=0;
vector
v.push_back(1);
for (int in=0;in
v.push_back((ve1[it]*ct+j)%10);
j=(ve1[it]*ct+j)/10;
}
if (j!=0) v.push_back(j);
tmp2.push_back(1);
for (it=v.size()-1;it>0;it--) tmp2.push_back(v[it]);
jia(tmp,tmp2);
}
vt.push_back(ve1[0]*ve2[0]); //copy and drop 0
t=tmp.size()-1;
for (i=1;((tmp[i]==0)&&(i
vt[0]=1; vt.push_back(0);
}else while (i<=t){
vt.push_back(tmp[i]); i++;
}
ve1=vt;
}
//chu fa here
void chu(vector
vector
int it;
it=(ve1[0]*ve2[0]>0)?1:-1;
v.push_back(1);
v.push_back(0);
tmp.push_back(1);
tmp.push_back(1);
ve1[0]=1; ve2[0]=1;
jian(ve1,ve2);
while (ve1[0]==1){
tmp2=ve2;
jian(ve1,tmp2);
jia(v,tmp);
}
ve1=v; ve1[0]=it;
}
//cheng fang here
void chengfang(vector
vector
tmp2=ve1;
v.push_back(1);
v.push_back(1);
tmp.push_back(1);
tmp.push_back(1);
while (!dengjia(v,ve2)){
cheng(ve1,tmp2);
jia(v,tmp);
}
}
//shuan here
void shuan(char ch){
i--;
switch(ch){
case '+' : jia(shu[i-1],shu[i]);
break;
case '-' : jian(shu[i-1],shu[i]);
break;
case '*' : cheng(shu[i-1],shu[i]);
break;
case '/' : chu(shu[i-1],shu[i]);
break;
case '^' : chengfang(shu[i-1],shu[i]);
break;
}
shu.pop_back();
}