Pagini recente » Cod sursa (job #1392737) | Cod sursa (job #339127) | Cod sursa (job #2508438) | Cod sursa (job #2502112) | Cod sursa (job #1928440)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("evaluare.in"); ofstream g("evaluare.out");
int nr,p,t[50101],sm[50101]; string s;
int paranteza(int primul)
{
t[nr] = 0;
while(s[p] != ')') {
if (s[p] >= '0' && s[p] <= '9') {
while(s[p] >= '0' && s[p] <= '9') {
t[nr] = t[nr] * 10 + (s[p] - '0');
++p;
}
}
if (s[p] == '+') {
++nr;
sm[nr] = 1;
++p;
t[nr] = 0;
}
if (s[p] == '-') {
++nr;
sm[nr] = 2;
++p;
t[nr] = 0;
}
if (s[p] == '*') {
++nr;
sm[nr] = 3;
++p;
t[nr] = 0;
}
if (s[p] == '/') {
++nr;
sm[nr] = 4;
++p;
t[nr] = 0;
}
if (s[p] == '(') {
++p;
t[nr] = paranteza(nr);
}
}
int i,j;
i = nr;
j = primul;
while(j < i) {
while((sm[j+1] == 3 || sm[j+1] == 4) && j < i) {
if (sm[j+1] == 3) {
t[j] = t[j] * t[j+1];
for(int l = j+1; l < i; ++l) {
t[l] = t[l+1];
sm[l] = sm[l+1];
}
--i;
}
else {
t[j] = t[j] / t[j+1];
for(int l =j+1; l< i; ++l) {
t[l] = t[l+1];
sm[l] = sm[l+1];
}
--i;
}
}
++j;
}
j = primul;
while(j < i) {
if (sm[j+1] == 1) {
t[j] = t[j] + t[j+1];
for(int l = j+1; l < i; ++l) {
t[l] = t[l+1];
sm[l] = sm[l+1];
}
--i;
}
else {
t[j] = t[j] - t[j+1];
for(int l = j+1; l < i; ++l) {
t[l] = t[l+1];
sm[l] = sm[l+1];
}
--i;
}
}
nr = i;
++p;
return t[primul];
}
int main() {
f>>s;
s += ')';
p = 0;
nr = 1;
g<<paranteza(nr);
return 0;
}