Pagini recente » Cod sursa (job #2643131) | Cod sursa (job #2777363) | Cod sursa (job #2195638) | Cod sursa (job #3151351) | Cod sursa (job #3244109)
#include <fstream>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char sir[100002],stiva_semne[100002];
int b,a,i,nr,stiva_nr[100001];
int f (int a,int b,char ch)
{
if (ch=='+')
return a+b;
if (ch=='-')
return a-b;
if (ch=='*')
return a*b;
return a/b;
}
int val (int ch)
{
if (ch=='+'||ch=='-')
return 1; ///scoate doar pe 2
if (ch=='*'||ch=='/')
return 2; ///nu scoate nimic
return 0; /// () poate scoate orice
}
int main ()
{
///doua stive, una cu operatori, una cu numere
fin>>sir;
for (i=0; sir[i]; i++)
{
if (sir[i]=='(')
stiva_semne[++b]='(';
else if (sir[i]==')')
{
while (stiva_semne[b]!='(')
{
stiva_nr[a-1]=f (stiva_nr[a-1],stiva_nr[a],stiva_semne[b]);
a--;
b--;
}
b--;
}
else if (sir[i]>='0'&&sir[i]<='9')
{
nr=0;
while (sir[i]>='0'&&sir[i]<='9')
{
nr=nr*10+(sir[i]-'0');
i++;
}
i--;
stiva_nr[++a]=nr;
}
else
{
while (val (stiva_semne[b])>=val (sir[i]))
{
stiva_nr[a-1]=f (stiva_nr[a-1],stiva_nr[a],stiva_semne[b]);
a--;
b--;
}
stiva_semne[++b]=sir[i];
}
}
while (b>0)
{
stiva_nr[a-1]=f (stiva_nr[a-1],stiva_nr[a],stiva_semne[b]);
b--;
a--;
}
fout<<stiva_nr[1];
return 0;
}