Pagini recente » Cod sursa (job #2827914) | Cod sursa (job #1865639) | Cod sursa (job #2344145) | Cod sursa (job #797376) | Cod sursa (job #2044233)
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
string s;
vector <long long> var;
int p;
long long expresie(), termen(), factor();
long long expresie()
{
long long r=termen();
while(s[p]=='+'||s[p]=='-')
{
if(s[p]=='+')
{
p++;
r+=termen();
}
else
{
p++;
r-=termen();
}
}
return r;
}
long long termen()
{
long long r=factor();
while(s[p]=='*')
{
if(s[p]=='*')
{
p++;
r*=factor();
}
}
return r;
}
long long factor()
{
long long r=0;
if(s[p]=='(')
{
p++;
r=expresie();
p++;
}
else if(s[p]=='[')
{
p++;
r=expresie();
r*=r;
p++;
}
else if(s[p]=='-')
{
p++;
r=-expresie();
}
else if(s[p]=='+')
{
p++;
r=expresie();
}
else if('a'<=s[p] && s[p]<='z')
{
r=var[s[p]-'a'];
p++;
}
return r;
}
int main()
{
freopen("eval.in","r",stdin);
freopen("eval.out","w",stdout);
int n;
long long l;
scanf("%d", &n);
for(n;n>0;--n)
{
scanf("\n%lld", &l);
var.push_back(l);
}
scanf("\n");
getline(cin,s);
cout<<expresie();
return 0;
}