Pagini recente » Cod sursa (job #73567) | Cod sursa (job #1797544) | Rating Rinja Alis (Alis) | Cod sursa (job #1002887) | Cod sursa (job #805524)
Cod sursa(job #805524)
using namespace std;
#include<fstream>
#include<ctype.h>
#include<cstring>
#include<stdlib.h>
#include<cmath>
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char x[200001],polo[200001],st[200001],op[]="+-*/()",c;
int n,i,k,vf=-1,l,nr;
int y,st2[100001];
char pop()
{
if (vf>=0) return st[vf--];
return 0;
}
void push(char c)
{
st[++vf]=c;
}
int main()
{
fin.getline(x,100000);
n=strlen(x);
for(i=0;i<n;i++)
{
if(isdigit(x[i]))
{
while(isdigit(x[i]))
{
polo[k++]=x[i];
i++;
}
polo[k++]='.';
}
switch (x[i])
{
case '(': push(x[i]);break;
case ')': while((c=pop())!='(') polo[k++]=c;break;
case '*': case '/':
while((vf!=-1) && strchr("*/",st[vf]) )
{
polo[k++]=pop();
}
push(x[i]); break;
case '+': case '-':
while( st[vf]!='('&& (vf!=-1) )
{
polo[k++]=pop();
}
push(x[i]);
}
}
while((c=pop())!=0) polo[k++]=c;
polo[k++]=0;
n=strlen(polo);
l=-1;
for(i=0;i<n;i++)
{
if(isdigit(polo[i]))
{
nr=atoi(polo+i);
st2[++l]=nr;
i=i+log10(nr)+2;
}
switch(polo[i])
{ case '*':st2[l-1]=st2[l-1]*st2[l]; l--;break;
case '+':st2[l-1]=st2[l-1]+st2[l--]; break;
case '-':st2[l-1]=st2[l-1]-st2[l--]; break;
case '/':st2[l-1]=st2[l-1]/st2[l--];break;
}
}
fout<<*st2;
return 0;
}