Pagini recente » Cod sursa (job #1450817) | Cod sursa (job #2713799) | Cod sursa (job #1147114) | Cod sursa (job #240847) | Cod sursa (job #2539906)
#include <fstream>
#define NMAX 100100
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char S[NMAX], *p=S;
long long eval(); ///prioritate +-(cea mai mica)
///apel -> termen
long long termen(); ///prioritate */
/// apel -> factor
long long factor(); /// (subexp) si nr.
/// apel -> eval
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>S;
cout<<eval()<<'\n';
return 0;
}
long long eval()
{
long long r=termen();
while(*p=='+' || *p=='-')
{
if(*p=='+'){
++p;//sar peste semn +
r+=termen();
}
else{
++p;//-
r-=termen();
}
}
return r;
}
long long termen()
{
long long r=factor();
while(*p=='*'||*p=='/')
{
if(*p=='*'){
++p;//*
r*=factor();
}
else{
++p;// /
r/=factor();
}
}
return r;
}
long long factor()
{
long long r=0;
if(*p=='(')
{
++p;//(
r=eval();
++p;//)
}
else while(isdigit(*p))
{
r=r*10+(*p-'0');
++p;
}
return r;
}
///multumesc simo cotizo pentru faptul ca mi a explicat indirect eval de expr
///sursa inspo> https://infoarena.ro/job_detail/145387?action=view-source