Pagini recente » Cod sursa (job #338079) | Cod sursa (job #1668447) | Cod sursa (job #2272115) | Cod sursa (job #2081243) | Cod sursa (job #1639671)
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int i,k,n;
char x[100005];
struct el
{
int nr;char semn;
}a[100005];
int scoatenr()
{
int nr=0;
while(x[i]>='0'&&x[i]<='9')
{
nr=nr*10+x[i]-'0';
i++;
}
return nr;
}
void operatii2()
{
if(a[k-1].semn=='*')
{
k--;
a[k].nr*=a[k+1].nr;
a[k+1].nr=0;
}
else
if(a[k-1].semn=='/')
{
k--;
a[k].nr/=a[k+1].nr;
a[k+1].nr=0;
}
}
void operatii1()
{
if(a[k-1].semn=='-')
{
k--;
a[k].nr-=a[k+1].nr;
a[k+1].nr=0;
}
else
if(a[k-1].semn=='+')
{
k--;
a[k].nr+=a[k+1].nr;
a[k+1].nr=0;
}
}
void paranteza()
{
a[k].semn='(';
while(x[i]!=')')
{
i++;
if(x[i]=='(')
paranteza();
else
a[++k].nr=scoatenr();
operatii2();
if(x[i]==')')
{
while(a[k-1].semn!='(')
operatii1();
}
else
a[k].semn=x[i];
}
i++;
}
int main()
{
fin.getline(x,100005);
for(i=0;x[i]!=0;i++)
if(x[i]=='(')
{
paranteza();
operatii2();
a[k].semn=x[i];
}
else
{
a[++k].nr=scoatenr();
operatii2();
a[k].semn=x[i];
}
while(k>1)
{
operatii1();
operatii2();
}
fout<<a[1].nr;
return 0;
}