Pagini recente » Borderou de evaluare (job #825002) | Borderou de evaluare (job #2416112) | Cod sursa (job #3268513) | Borderou de evaluare (job #27506) | Cod sursa (job #3279697)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
const int MAX=1e5;
int sol,i,n;
char v[MAX+10];
int expresie();
int termen();
int factor();
int constanta();
int main()
{
fin.getline(v,MAX+5);
n=strlen(v);
i=0;
sol=expresie();
fout<<sol;
return 0;
}
int expresie()
{
int r=termen();
while ((v[i]=='+' || v[i]=='-') && i<n)
{
if (v[i]=='+')
{
i++;
r+=termen();
}
else
{
i++;
r-=termen();
}
}
return r;
}
int termen()
{
int r=factor();
while ((v[i]=='*' || v[i]=='/') && i<n)
{
if (v[i]=='*')
{
i++;
r*=factor();
}
else
{
i++;
r/=factor();
}
}
return r;
}
int factor()
{
int r;
if (v[i]=='(')
{
i++;
r=expresie();
i++;
}
else
r=constanta();
return r;
}
int constanta()
{
int r=0;
while (v[i]>='0' && v[i]<='9' && i<n)
{
r*=10;
r+=v[i]-'0';
i++;
}
return r;
}