Pagini recente » Cod sursa (job #603296) | Cod sursa (job #501483) | Cod sursa (job #76907) | Cod sursa (job #1496535) | Cod sursa (job #2538778)
#include <bits/stdc++.h>
#define N 100005
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char e[N];
int i, lg;
int Expresie();
int Termen();
int Factor();
int main()
{
fin.getline(e, N);
fin.close();
lg=strlen(e);
fout<<Expresie();
fout.close();
return 0;
}
int Expresie() ///operatorii + sau -
{
int sum=Termen(); ///primul termen
while (i<lg && (e[i]=='+' || e[i]=='-'))
if (e[i]=='+') {i++; sum+=Termen();}
else {i++; sum-=Termen();}
return sum;
}
int Termen() ///operatori * /
{
int prod=Factor(); ///primul factor
while (i<lg && (e[i]=='*' || e[i]=='/'))
if (e[i]=='*') {i++; prod*=Factor();}
else {i++; prod/=Factor();}
return prod;
}
int Factor()
{
int semn=1, val=0;
while (e[i]=='-') semn=-semn, i++;
if (e[i]=='(')
{
i++; val=Expresie(); i++;
return semn*val;
}
while (e[i]>='0' && e[i]<='9')
val=val*10+(e[i]-'0'), i++;
return semn*val;
}