Pagini recente » Cod sursa (job #1361318) | Cod sursa (job #409189) | Cod sursa (job #1569053) | Cod sursa (job #1805622) | Cod sursa (job #1413929)
#include<iostream>
#include<fstream>
#include<cstring>
#define MAX 3000000000
using namespace std;
char s[100005];
int n,st[1000],v,i,j;
void verifica() {
if (st[v]>=0&&st[v]<=MAX && st[v-2]>=0&&st[v-2]<=MAX && v>2)
switch (st[v-1]) {
case -2: // +
if (s[i+1]!='/'&&s[i+1]!='*') {
st[v-2]=st[v-2]+st[v];
v=v-2;
}
break;
case -3: // -
if (s[i+1]!='/'&&s[i+1]!='*') {
st[v-2]=st[v-2]-st[v];
v=v-2;
}
break;
case -4: // *
st[v-2]=st[v-2]*st[v];
v=v-2; break;
case -5: // /
st[v-2]=st[v-2]/st[v];
v=v-2; break;
}
}
int main() {
ifstream f("evaluare.in");
ofstream g("evaluare.out");
f.getline(s,100005);
n=strlen(s);
v=0; //varful stivei
for (i=0; i<n; i++) {
switch (s[i]) {
case '(':
v++; st[v]=-1;
break;
case '+':
v++; st[v]=-2;
break;
case '-':
v++; st[v]=-3;
break;
case '*':
v++; st[v]=-4;
break;
case '/':
v++; st[v]=-5;
break;
case ')':
st[v-1]=st[v];
v--;
break;
default: //cand s[i]=cifra
v++; st[v]=s[i]-'0';
while (s[i+1]>='0'&&s[i+1]<='9') {
i++;
st[v]=st[v]*10+(s[i]-'0');
}
break;
} //sfarsit switch
if (st[v]>=0&&st[v]<=MAX && st[v-2]>=0&&st[v-2]<=MAX && v>2)
switch (st[v-1]) {
case -2: // +
if (s[i+1]!='/'&&s[i+1]!='*') {
st[v-2]=st[v-2]+st[v];
v=v-2;
}
break;
case -3: // -
if (s[i+1]!='/'&&s[i+1]!='*') {
st[v-2]=st[v-2]-st[v];
v=v-2;
}
break;
case -4: // *
st[v-2]=st[v-2]*st[v];
v=v-2;
verifica();break;
case -5: // /
st[v-2]=st[v-2]/st[v];
v=v-2;
verifica(); break;
}
// for (j=1; j<=v; j++)
// cout<<st[j]<<' ';
// cout<<'\n';
}
if (v>1){
verifica();
}
g<<st[v]<<'\n';
f.close();
g.close();
return 0;
}