Pagini recente » Cod sursa (job #1254564) | Profil M@2Te4i | Cod sursa (job #2072854) | Cod sursa (job #2693973) | Cod sursa (job #1792968)
#include <iostream>
#include <cstring>
#include<fstream>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
struct stiva1
{
int semne[100010];
int ordin[100010];
int ultimul=-1;
}s1;
struct stiva2
{
int numere[100010];
int ultimul_nr=-1;
}s2;
void pune1(int semn, int ordin)
{
s1.ultimul++;
s1.semne[s1.ultimul] = semn;
s1.ordin[s1.ultimul] = ordin;
}
void pune2(int nr)
{
s2.ultimul_nr++;
s2.numere[s2.ultimul_nr] = nr;
}
void scoate1()
{
s1.ultimul--;
}
void scoate2()
{
s2.ultimul_nr--;
}
char s[100010];
int i=0,x=0,k=0;
int main()
{
in>>s;
s[strlen(s)]='#';
while(s[i]!='\0')
{
if (s[i]=='+'){pune1(s[i],1+k);
x=0;}
else if(s[i]=='-') {pune1(s[i],1+k);
x=0;}
else if(s[i]=='*'){pune1(s[i],2+k);
x=0;}
else if(s[i]=='/') {pune1(s[i],2+k);
x=0;}
else if(s[i]=='(') k+=10;
else if(s[i]==')') k-=10;
else if(s[i]=='#') {pune1(s[i],0);
x=0;}
else {x = x * 10 + int(s[i]-'0');
if(s[i+1]<'0'||s[i+1]>'9')
{
pune2(x);
}}
i++;
if(s2.ultimul_nr>=1&&s1.ordin[s1.ultimul-1]>=s1.ordin[s1.ultimul])
{
scoate2();
scoate2();
scoate1();
if(s1.semne[s1.ultimul]=='/')
{
int rez = s2.numere[s2.ultimul_nr+1] / s2.numere[s2.ultimul_nr+2];
pune2(rez);
}
if(s1.semne[s1.ultimul]=='*')
{
int rez = s2.numere[s2.ultimul_nr+1] * s2.numere[s2.ultimul_nr+2];
pune2(rez);
}
if(s1.semne[s1.ultimul]=='+')
{
int rez = s2.numere[s2.ultimul_nr+1] + s2.numere[s2.ultimul_nr+2];
pune2(rez);
}
if(s1.semne[s1.ultimul]=='-')
{
int rez = s2.numere[s2.ultimul_nr+1] - s2.numere[s2.ultimul_nr+2];
pune2(rez);
}
scoate1();
i--;
}
}
out<<s2.numere[s2.ultimul_nr];
return 0;
}