Cod sursa(job #1780481)
Utilizator | Casapu Andreas ZeBuGgEr | Data | 16 octombrie 2016 11:55:11 |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 50 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.23 kb |
#include<cstdio>
#include<cstring>
using namespace std;
char s[100010];
int poz;
int fnum()
{
int val=0;
while(s[poz]>='0'&&s[poz]<='9')
{
val*=10;
val+=s[poz]-'0';
poz++;
}
return val;
}
int solve()
{
int su=0,p=1;
while(s[poz]!=')')
{
if(s[poz]=='(')
{
poz++;
p*=solve();
}
else if(s[poz]=='*')
{
poz++;
}
else if(s[poz]=='/')
{
poz++;
if(s[poz]=='(')
{
poz++;
p*=solve();
}
else
{
p/=fnum();
}
}
else if(s[poz]>='0'&&s[poz]<='9')
{
p*=fnum();
}
else if(s[poz]=='+')
{
su+=p;
p=1;
poz++;
}
else
{
su+=p;
p=-1;
poz++;
}
}
poz++;
su+=p;
return su;
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",s);
s[strlen(s)]=')';
printf("%d",solve());
}