Pagini recente » Cod sursa (job #1796235) | Cod sursa (job #801469) | Cod sursa (job #2106052) | Cod sursa (job #891331) | Cod sursa (job #2245846)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100005];
int n;
int Calcul(int &poz)
{
stack<int>st;
poz++;
int total=0,val=0,semn=0,curent=1;
for(;poz<=n;poz++)
{
if(s[poz]=='+')
{
curent=1;
semn=0;
}
else if(s[poz]=='-')
{
curent=-1;
semn=0;
}
else if(s[poz]=='(')
{
val=Calcul(poz);
if(semn==1) st.top()*=val;
else if(semn==-1) st.top()/=val;
else st.push(val*curent);
}
else if('0'<=s[poz]&&s[poz]<='9')
{
val=0;
while('0'<=s[poz]&&s[poz]<='9')
{
val=val*10+s[poz]-'0';
poz++;
}
if(semn==1) st.top()*=val;
else if(semn==-1) st.top()/=val;
else st.push(val*curent);
poz--;
}
else if(s[poz]=='*')
{
semn=1;
}
else if(s[poz]=='/')
{
semn=-1;
}
else if(s[poz]==')')
break;
}
while(!st.empty())
{
total+=st.top();
st.pop();
}
return total;
}
int main()
{
int poz=0;
fin>>(s+1);
n=strlen(s+1);
fout<<Calcul(poz);
return 0;
}