Pagini recente » Cod sursa (job #553505) | Cod sursa (job #1206099) | Cod sursa (job #164613) | Cod sursa (job #2311929) | Cod sursa (job #2289494)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int st[100005];
char s[100005];
/*
'(' = -1;
'+' = -2;
'-' = -3;
'*' = -4;
'/' = -5;
*/
int main()
{
int i, top = 0, p, j, nr, k, semn = 1;
fin >> s;
for(i = 0; s[i]; )
{
if(s[i] == '(')
st[++top] = 1000000001, i++;
if(s[i] == '+')
i++;
if(s[i] == '-')
semn = -1, i++;
if(s[i] == '*')
st[++top] = 1000000003, i++;
if(s[i] == '/')
st[++top] = 1000000004, i++;
if('0' <= s[i] && s[i] <= '9')
{
nr = 0;
while('0' <= s[i] && s[i] <= '9')
nr = nr * 10 + (s[i] - '0'), i++;
if(semn == -1)
nr *= semn, semn = 1;
st[++top] = nr;
}
if(s[i] == ')')
{
p = top;
while(st[p] != 1000000001)
p--;
p++;
for(j = p; j < top; j++)
{
if(st[j] == 1000000003)
{
st[j - 1] = st[j - 1] * st[j + 1];
for(k = j; k <= top - 2; k++)
st[k] = st[k + 2];
top -= 2;
}
else if(st[j] == 1000000004)
{
st[j - 1] = st[j - 1] / st[j + 1];
for(k = j; k <= top - 2; k++)
st[k] = st[k + 2];
top -= 2;
}
}
st[p - 1] = 0;
for(j = p; j <= top; j++)
st[p - 1] += st[j];
top = p - 1;
i++;
}
}
for(j = 1; j <= top; j++)
{
if(st[j] == 1000000003)
{
st[j - 1] = st[j - 1] * st[j + 1];
for(k = j; k <= top - 2; k++)
st[k] = st[k + 2];
top -= 2;
}
else if(st[j] == 1000000004)
{
st[j - 1] = st[j - 1] / st[j + 1];
for(k = j; k <= top - 2; k++)
st[k] = st[k + 2];
top -= 2;
}
}
for(j = 2; j <= top; j++)
st[1] += st[j];
fout << st[1] << " ";
fin.close();
fout.close();
return 0;
}