Pagini recente » Cod sursa (job #936118) | Cod sursa (job #1155756) | Cod sursa (job #159053) | Cod sursa (job #355601) | Cod sursa (job #567290)
Cod sursa(job #567290)
#include<fstream>
#include<cmath>
#include<stack>
using namespace std;
stack<char> p;
stack<int> r;
char s[100100],pol[100100];
int i,k,x;
int main()
{ifstream f("evaluare.in");
f.getline(s,100100);
f.close();
p.push(-1);
for(i=0;s[i];i++)
{if(isdigit(s[i]))
{while(isdigit(s[i]))
{pol[k++]=s[i];i++;}
pol[k++]='x';}
if(s[i]=='(')
p.push('(');
else
if(s[i]=='*'||s[i]=='/')
{
if(p.top()=='/'||p.top()=='*')
{pol[k++]=p.top();
p.pop();}
p.push(s[i]);}
else
if(s[i]=='+'||s[i]=='-')
{while(p.top()!='('&&p.top()!=-1)
{pol[k++]=p.top();
p.pop();}
p.push(s[i]);}
else
if(s[i]==')')
{while(p.top()!='(')
{pol[k++]=p.top();
p.pop();}
p.pop();}
}
while(p.top()!=-1)
{pol[k++]=p.top();
p.pop();}
r.push(0);
r.push(0);
for(i=0;pol[i];i++)
{if(isdigit(pol[i]))
{x=0;
while(isdigit(pol[i])){
x=x*10+(pol[i]-'0');i++;}
r.push(x);
}
if(pol[i]!='x')
{x=r.top(); r.pop();
if(pol[i]=='+') r.top()+=x;
else
if(pol[i]=='-') r.top()-=x;
else
if(pol[i]=='*') r.top()*=x;
else
r.top()/=x;
}}
ofstream g("evaluare.out");
g<<r.top();
g.close();
}