Pagini recente » Cod sursa (job #1873544) | Cod sursa (job #2143231) | Cod sursa (job #2042212) | Cod sursa (job #1764829) | Cod sursa (job #2109306)
#include <iostream>
#include <fstream>
#include <string.h>
#include <stack>
using namespace std;
ifstream fin("eval.in");
ofstream fout("eval.out");
string s;
int x;
int is_op1(int ind)
{
if(s[ind]=='+' || s[ind]=='-')
return 1;
else
return 0;
}
int is_op2(int ind)
{
if(s[ind]=='*' || s[ind]=='/')
return 1;
else
return 0;
}
int factor(int &ind)
{
int eval(int &a);
int nr=0;
if(s[ind]=='(')
{
int nr=eval(++ind);
ind++;
return nr;
}
else
while(ind<=s.size() && isdigit(s[ind])!=0)
{
nr=nr*10+s[ind]-'0';
ind++;
}
return nr;
}
int termen(int &ind)
{
int p=factor(ind);
while(ind<=s.size() && is_op2(ind))
{
if(s[ind]=='*')
p*=factor(++ind);
else
p/=factor(++ind);
}
return p;
}
int eval(int &ind)
{
int a;
a=termen(ind);
while(ind<=s.size() && is_op1(ind))
{
if(s[ind]=='+')
a+=termen(++ind);
else
a-=termen(++ind);
}
return a;
}
int main()
{
fin>>s;
fout<<eval(x);
return 0;
}