Pagini recente » Cod sursa (job #1425531) | Cod sursa (job #1857084) | Cod sursa (job #484816) | Cod sursa (job #2464725) | Cod sursa (job #1892332)
#include <bits/stdc++.h>
#define lmax 100001
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char sir[lmax];
long expresie(char* &sir);
long termen(char* &sir);
long factor(char* &sir);
long numar(char* &sir);
long expresie(char* &sir)
{
long raspuns=termen(sir);
while(sir[0]=='+'||sir[0]=='-')
if(sir[0]=='+')
{
sir++;
raspuns+=termen(sir);
}
else
{
sir++;
raspuns-=termen(sir);
}
return raspuns;
}
long termen(char* &sir)
{
long raspuns=factor(sir);
while(sir[0]=='*'||sir[0]=='/')
if(sir[0]=='*')
{
sir++;
raspuns*=factor(sir);
}
else
{
sir++;
raspuns/=factor(sir);
}
return raspuns;
}
long factor(char* &sir)
{
long raspuns;
if(sir[0]=='(')
{
sir++; // '('
raspuns=expresie(sir);
sir++; // ')'
}
else if(sir[0]>='0'&&sir[0]<='9') raspuns=numar(sir);
return raspuns;
}
long numar(char* &sir)
{
long raspuns=0;
while(sir[0]>='0'&&sir[0]<='9')
{
raspuns=raspuns*10+(sir[0]-'0');
sir++;
}
return raspuns;
}
int main()
{
fin>>sir;
char* s=sir;
fout<<expresie(s);
return 0;
}