Pagini recente » Cod sursa (job #40938) | Cod sursa (job #1409503) | Cod sursa (job #2265717) | Cod sursa (job #2195843) | Cod sursa (job #2144420)
#include <bits/stdc++.h>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
#define ll long long
string s;
int n1=0, n2=0;
ll v[100001];
char o[100001];
ll add(char op, ll a, ll b){
switch(op){
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
}
}
int exp(){
int i;
for(i=0; i<s.length(); ++i){
if(s[i]>='0' && s[i]<='9'){
if(s[i-1]>='0' && s[i-1]<='9')
v[n1]=v[n1]*10+int(s[i])-48;
else
v[++n1]=int(s[i])-48;
}
else if(s[i]=='(')
o[++n2]='(';
else if(s[i]==')'){
while(o[n2]!='('){
--n2, --n1;
v[n1]=add(o[n2+1], v[n1], v[n1+1]);
}
--n2;
}
else{
if(s[i]=='+' || s[i]=='-'){
while(n2!=0 && o[n2]!='('){
--n2, --n1;
v[n1]=add(o[n2+1], v[n1], v[n1+1]);
}
}
else{
while(n2!=0 && o[n2]!='(' && o[n2]!='+' && o[n2]!='-'){
--n2, --n1;
v[n1]=add(o[n2+1], v[n1], v[n1+1]);
}
}
o[++n2]=s[i];
}
}
while(n2>0){
--n2, --n1;
v[n1]=add(o[n2+1], v[n1], v[n1+1]);
}
return v[1];
}
int main(){
in>>s;
out<<exp();
}