Pagini recente » Cod sursa (job #1726645) | Cod sursa (job #2110222) | Cod sursa (job #1157906) | Cod sursa (job #2785842) | Cod sursa (job #1363633)
#include <stdio.h>
#include <vector>
#include <string.h>
#include <utility>
using namespace std;
std::vector< std::pair<int,char> > a;
int nr;
char y;
char semne[5];
void doit(int start,int stop,char sign)
{
for(int i=start;i<=stop&&i<a.size();++i)
{
while(a[i].second==sign&&i<a.size())
{
if(sign=='*')a[i-1].first *= a[i+1].first;
else if(sign=='/')a[i-1].first /= a[i+1].first;
else if(sign=='+')a[i-1].first += a[i+1].first;
else if(sign=='-')a[i-1].first -= a[i+1].first;
stop -= 2;
a.erase(a.begin()+i,a.begin()+i+2);
}
}
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
strcpy(semne,"*/+-");
while(scanf("%c",&y))
{
if(y>='0'&&y<='9')
{
nr = nr * 10 + y - '0';
}
else
{
if(nr!=0)a.push_back( std::make_pair(nr,'0') );
if(y=='(')a.push_back( std::make_pair(0,'(') );
else if(y==')')a.push_back( std::make_pair(0,')') );
else if(y=='*')a.push_back( std::make_pair(0,'*') );
else if(y=='/')a.push_back( std::make_pair(0,'/') );
else if(y=='+')a.push_back( std::make_pair(0,'+') );
else if(y=='-')a.push_back( std::make_pair(0,'-') );
nr = 0;
if(y=='\n')break;
}
}
bool este = false;
do
{
este = false;
for(int i=0;i<a.size();++i)
{
if(a[i].second==')')
{
este = true;
int k = i;
do
{
k--;
if(a[k].second=='(')break;
}while(!(a[k].second=='('));
for(int j=0;j<=3;++j)
{
doit(k,i,semne[j]);
}
a[k] = a[k+1];
a.erase(a.begin()+k+1,a.begin()+k+3);
}
}
}while(!(este==false));
nr = a.size()-2;
for(int j=0;j<=3;++j)
{
doit(0,nr,semne[j]);
}
printf("%d",a[0].first);
return 0;
}