Pagini recente » Cod sursa (job #2572939) | Cod sursa (job #808016) | Cod sursa (job #2616778) | Istoria paginii runda/concurs_27mai | Cod sursa (job #1475823)
#include <vector>
#include <string.h>
#include <iostream>
using namespace std;
string inf;
vector<char> post,stack;
vector<int> nrStack;
int i;
int lessOrEqualPrec(char stackChar,char newChar)
{
if ((newChar=='+' || newChar=='-') || (stackChar=='*' || stackChar=='/'))
return true;
else
return false;
}
int main()
{
cin>>inf;
int size=inf.size();
for (i=0;i<size;++i)
{
if(inf[i]<='9' && inf[i]>='0')
{
while(inf[i]<='9' && inf[i]>='0')
{
post.push_back(inf[i++]);
}
i--;
post.push_back(' ');
}
else if(inf[i]=='(')
{
stack.push_back(inf[i]);
}
else if(inf[i]==')')
{
while(stack.size()>0 && stack.at(stack.size()-1)!='(')
{
post.push_back(stack.at(stack.size()-1));
stack.pop_back();
}
stack.pop_back();
}
else
{
if(stack.size()>0)
{
while( stack.size()>0 && stack.at(stack.size()-1)!='(' && lessOrEqualPrec(stack.at(stack.size()-1),inf[i]) )
{
post.push_back(stack.at(stack.size()-1));
stack.pop_back();
}
}
stack.push_back(inf[i]);
}
}
while(stack.size()>0)
{
post.push_back(stack.at(stack.size()-1));
stack.pop_back();
}
int nmb1,nmb2;
char op;
size=post.size();
while(post.size()>0)
{
if (post.at(0)>='0' && post.at(0)<='9')
{
int nmb=0;
nmb+=post.at(0)-'0';
post.erase(post.begin());
while(post.at(0)!=' ')
{
nmb*=10;
nmb+=post.at(0);
post.erase(post.begin());
}
post.erase(post.begin());
nrStack.push_back(nmb);
}
else
{
op=post.at(0);
post.erase(post.begin());
int nmb2=nrStack.at(nrStack.size()-1);
nrStack.pop_back();
int nmb1=nrStack.at(nrStack.size()-1);
nrStack.pop_back();
if (op=='+')
{
nrStack.push_back(nmb1+nmb2);
}
else if (op=='-')
{
nrStack.push_back(nmb1-nmb2);
}
else if (op=='*')
{
nrStack.push_back(nmb1*nmb2);
}
else if (op=='/')
{
nrStack.push_back(nmb1/nmb2);
}
}
}
cout<<nrStack.at(0);
}