Pagini recente » Cod sursa (job #1186764) | Cod sursa (job #1609426) | Cod sursa (job #1221428) | Cod sursa (job #3283812) | Cod sursa (job #1363441)
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
std::vector<int> a,b;
int nr;
char x[100002],y;
void doit(int start,int stop,int signal)
{
for(int i=start;i<=stop;++i)
{
if(b[i]==signal)
{
if(signal == 1)a[i-1] *= a[i+1];
else if(signal == 2)a[i-1] /= a[i+1];
else if(signal == 3)a[i-1] += a[i+1];
else if(signal == 4)a[i-1] -= a[i+1];
stop -= 2;
a.erase(a.begin()+i,a.begin()+i+2);
b.erase(b.begin()+i,b.begin()+i+2);
}
}
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
while(scanf("%c",&y))
{
if(y>='0'&&y<='9')
{
nr = nr * 10 + y - '0';
}
else
{
if(nr!=0)
{
b.push_back(0);
a.push_back(nr);
}
nr = 0;
if(y=='(')
{
b.push_back(-10);
a.push_back(0);
}
else if(y==')')
{
b.push_back(10);
a.push_back(0);
}
else if(y=='*')
{
b.push_back(1);
a.push_back(0);
}
else if(y=='/')
{
b.push_back(2);
a.push_back(0);
}
else if(y=='+')
{
b.push_back(3);
a.push_back(0);
}
else if(y=='-')
{
b.push_back(4);
a.push_back(0);
}
if(y=='\n')break;
}
}
bool este = false;
do
{
este = false;
for(int i=0;i<b.size();++i)
{
if(b[i]==10)
{
este = true;
int k = i;
do
{
k--;
if(b[k]==-10)break;
}while(!(b[k]==-10));
for(int j=1;j<=4;++j)
{
doit(k,i,j);
}
a[k] = a[k+1];
b[k] = 0;
a.erase(a.begin()+k+1,a.begin()+k+3);
b.erase(b.begin()+k+1,b.begin()+k+3);
}
}
}while(!(este==false));
for(int j=1;j<=4;++j)
{
doit(0,a.size()-1,j);
}
printf("%d",a[0]);
return 0;
}