Pagini recente » Cod sursa (job #2113457) | Cod sursa (job #1159769) | Cod sursa (job #2344698) | Cod sursa (job #2488832) | Cod sursa (job #154298)
Cod sursa(job #154298)
#include<fstream.h>
#include<string.h>
char a[100010],b[100010],c;
long x[100010],vx,vb,po,ps,i,n;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
long numar(long &i)
{
long nr=0;
while(i<n && a[i]>='0' && a[i]<='9')
{
nr=nr*10+a[i]-'0';
i++;
}
i--;
return nr;
}
int pri(char c)
{
switch(c)
{
case '+':case '-':return 1;
case '*':case '/':return 2;
case '(':return 0;
}
return 0;
}
void efectueaza(long &q,long w,char e)
{
switch(e)
{
case '+':q+=w;break;
case '-':q-=w;break;
case '*':q*=w;break;
case '/':q/=w;break;
}
}
int main()
{
f>>a;
n=strlen(a);
for(i=0;i<n;i++)
if(a[i]>='0' && a[i]<='9')
{
x[vx++]=numar(i);
}
else
if(a[i]=='(' )
b[vb++]=a[i];
else
if(a[i]==')')
{
while(b[vb-1]!='(')
{
efectueaza(x[vx-2],x[vx-1],b[vb-1]);
vx--;vb--;
}
vb--;
}
else
{
po=pri(a[i]);
if(vb>0)
ps=pri(b[vb-1]);
else
ps=-5;
while(po<=ps)
{
efectueaza(x[vx-2],x[vx-1],b[vb-1]);
vx--;vb--;
if(vb>0)
ps=pri(b[vb-1]);
else
ps=-5;
}
b[vb++]=a[i];
}
while(vb>0)
{
efectueaza(x[vx-2],x[vx-1],b[vb-1]);
vx--;vb--;
}
g<<x[0]<<'\n';
g.close();
return 0;
}