//author:yehongjiang
//date;2012/11/29
#include"stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
//*********读取字符******************
const int m=1000;
char input[m]={0};
int i=0;
int t=0;
for(i=0;i<i+1;i++)
{
input[i]=getchar();
if(input[i]=='=')
{
t=i;
break;
}
}
//********转换算式*********************
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
int f=0;
int g=0;
int h=0;
int total=0;
int value[m]={0};
char symbol[m]={'0'} ;
int change[m]={0};//储存计算数的权
for(i=0;i<=t;i++)
{
if((input[i]=='+')||(input[i]=='-')||(input[i]=='*')||(input[i]=='/')||(input[i]=='=')||(input[i]=='(')||(input[i]==')'))
{
ss:
symbol[a]=input[i];
symbol[a+1]=' ';
a++;
b=i;
c=i;
if((input[i+1]=='+')||(input[i+1]=='-')||(input[i+1]=='*')||(input[i+1]=='/')||(input[i+1]=='=')||(input[i+1]=='(')||(input[i+1]==')'))
{
i++;
goto ss;
}
else
{
for(i=b+1;i<=t;i++)
{
if((input[i]=='+')||(input[i]=='-')||(input[i]=='*')||(input[i]=='/')||(input[i]=='=')||(input[i]=='(')||(input[i]==')'))
{
d=i;
break;
}
}
for(f=d-b-2;f>=0;f--)//定义计算数的权
{
change[d-b-2-f]=pow(double(10),f);
}
f=0;
for(c=c+1;c<d;c++)//转化
{
total=total+change[f]*(input[c]-48);//将单个数字加上权求和
f++;
}
value[a]=total;//将转化后的值赋给value数组
a++;
total=0;
i--;
}
}
else
{
for(i=i+1;i<=t;i++)
{
if((input[i]=='+')||(input[i]=='-')||(input[i]=='*')||(input[i]=='/')||(input[i]=='=')||(input[i]=='(')||(input[i]==')'))
{
e=i;
break;
}
}
for(f=e-1;f>=0;f--)//定义计算数的权
{
change[e-1-f]=pow(double(10),f);
}
f=0;
for(g=0;g<e;g++)//转化
{
total=total+change[f]*(input[g]-48);//将单个数字加上权求和
f++;
}
value[a]=total;//将转化后的值赋给value数组
a++;
total=0;
i--;
}
}
//****************计算部分***********************
//**********8括号内的运算*****************
int q=0;
int w=0;
int r=0;
int y=0;
int u=0;
int temp=0;
int time=0;
int time2=0;
for(i=0;i<=a;i++)
{
if(symbol[i]==')')
{
time++;
}
}
for(y=1;y<=time;y++)
{
for(i=0;i<=a;i++)
{
while(symbol[i]==')')
{
q=i;
symbol[i]=' ';
for(u=q;u>=0;u--)
{
if(symbol[u]=='(')
{
w=u;
symbol[u]=' ';
break;
}
}
for(i=w+1;i<q;i++)
{
if((symbol[i]=='+')||(symbol[i]=='-')||(symbol[i]=='*')||(symbol[i]=='/'))
{
time2++;
}
}
//进行*和/的运算
for(i=w+1;i<q;i++)
{
while(symbol[i]=='*')
{
temp=value[i-1]*value[i+1];
if(time2>1)
{
time2--;
value[i-1]=temp;
for(r=i+2;r<=a;r++)
{
value[r-2]=value[r];
symbol[r-2]=symbol[r];
}
q=q-2;
i=w+1;
}
else
{
value[i-2]=temp;
for(r=i+3;r<=a;r++)//运算成功,将value中的值前移4位,symbol中的值前移4位
{
value[r-4]=value[r];
symbol[r-4]=symbol[r];
}
q=q-4;
i=w;
}
}
while(symbol[i]=='/')
{
temp=value[i-1]/value[i+1];
if(time2>1)
{
time2--;
value[i-1]=temp;
for(r=i+2;r<=a;r++)
{
value[r-2]=value[r];
symbol[r-2]=symbol[r];
}
q=q-2;
i=w;
}
else
{
value[i-2]=temp;
for(r=i+3;r<=a;r++)//运算成功,将value中的值前移5位,symbol中的值前移5位
{
value[r-4]=value[r];
symbol[r-4]=symbol[r];
}
q=q-4;
i=w;
}
}
}
//进行+和-的运算
for(i=w+1;i<q;i++)
{
while(symbol[i]=='+')
{
temp=value[i-1]+value[i+1];
if(time2>1)
{
time2--;
value[i-1]=temp;
for(r=i+2;r<=a;r++)
{
value[r-2]=value[r];
symbol[r-2]=symbol[r];
}
q=q-2;
i=w+1;
}
else
{
value[i-2]=temp;
for(r=i+3;r<=a;r++)//运算成功,将value中的值前移4位,symbol中的值前移4位
{
value[r-4]=value[r];
symbol[r-4]=symbol[r];
}
q=q-4;
i=w;
}
}
while(symbol[i]=='-')
{
temp=value[i-1]-value[i+1];
if(time2>1)
{
time2--;
value[i-1]=temp;
for(r=i+2;r<=a;r++)
{
value[r-2]=value[r];
symbol[r-2]=symbol[r];
}
q=q-2;
i=w+1;
}
else
{
value[i-2]=temp;
for(r=i+3;r<=a;r++)//运算成功,将value中的值前移4位,symbol中的值前移4位
{
value[r-4]=value[r];
symbol[r-4]=symbol[r];
}
q=q-4;
i=w;
}
}
}
}
time2=0;
}
}
//***************括号外的运算********************
//进行*和/的运算
int o=0;
for(i=1;i<=a;i++)
{
while(symbol[i]=='*')
{
value[i-1]=value[i-1]*value[i+1];
for(o=i+2;o<=a;o++)//运算成功,将value中的值前移两位,symbol中的值前移两位
{
value[o-2]=value[o];
symbol[o-2]=symbol[o];
}
i=1;
}
while(symbol[i]=='/')
{
value[i-1]=value[i-1]/value[i+1];
for(o=i+2;o<=a;o++)//运算成功,将value中的值前移两位,symbol中的值前移两位
{
value[o-2]=value[o];
symbol[o-2]=symbol[o];
}
i=1;
}
}
//进行+和-的运算
for(i=1;i<=c;i++)
{
while(symbol[i]=='+')
{
value[i-1]=value[i-1]+value[i+1];
for(o=i+2;o<=a;o++)//运算成功,将value中的值前移两位,symbol中的值前移两位
{
value[o-2]=value[o];
symbol[o-2]=symbol[o];
}
i=1;
}
while(symbol[i]=='-')
{
value[i-1]=value[i-1]-value[i+1];
for(o=i+2;o<=a;o++)//运算成功,将value中的值前移两位,symbol中的值前移两位
{
value[o-2]=value[o];
symbol[o-2]=symbol[o];
}
i=1;
}
}
cout<<value[0];
system("pause");
return 0;
}