Pagini recente » Cod sursa (job #936220) | Cod sursa (job #945722) | Cod sursa (job #281559) | Cod sursa (job #481793) | Cod sursa (job #567283)
Cod sursa(job #567283)
#include<fstream>
#include<cmath>
#include<stack>
using namespace std;
stack<char> p;
stack<int> r;
char s[100010],pol[100010];
int i,k,x;
int main()
{ifstream f("evaluare.in");
f.getline(s,100010);
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();
}