Pagini recente » Cod sursa (job #1595694) | Cod sursa (job #2357496) | Cod sursa (job #1346786) | Cod sursa (job #2418403) | Cod sursa (job #2961935)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
struct Nod
{
char* informatie;
struct Nod *st, *dr;
};
/*
char* SetUpConstruiesteArbore(char *s)
{
int n = strlen(s), m, i, j, x, cx;
char* Operatori = "()+-*^/|&";
char* Raspuns;
j = 0;
for(i = 0; i < n; i++) if(s[i] != ' ') s[j++] = s[i];
s[j] = '\n', n = j;
for(i = 0; i < n; i++)
{
if(strchr(Operatori, s[i]) != nullptr) Raspuns += s[i];
else if(s[i] < '0' || s[i] > 9)
{
char* nume = "";
while(i < n && s[i] != '.' && strcmp(Operatori, s[i]) == nullptr)
{
nume += s[i];
i++;
}
cx = x = getIntVal(nume);
while(cx)
{
cx /= 10;
Raspuns += '0';
}
m = strlen(R), j = 0;
while(x)
{
R[m-1-j] += x % 10;
x /= 10;
j++;
}
}
}
return Raspuns;
}
*/
int Prioritate(char Operator)
{
if(Operator == '+' || Operator == '-') return 1;
else if(Operator == '/' || Operator == '*') return 2;
}
int TransfInFormaPoloneza(char* s)
{
int n = int(strlen(s)), i, capat1 = -1, capat2 = -1;
int s1[100005], x, nr, ParteIntreaga, ParteFractionara;
char s2[100005];
for(i = 0; i < n; i++)
{
if(s[i] >= '0' && s[i] <= '9')
{
ParteIntreaga = ParteFractionara = 0, nr = 1;
while(i < n && s[i] >= '0' && s[i] <= '9')
{
ParteIntreaga = ParteIntreaga * 10 + s[i] - '0';
i++;
}
if(i < n && s[i] == '.')
{
while(i < n && s[i] >= '0' && s[i] <= '9')
{
ParteFractionara = ParteFractionara * 10 + s[i] - '0';
nr *= 10;
i++;
}
}
i--;
x = ParteIntreaga + ParteFractionara / nr;
s1[++capat1] = x;
}
else if(s[i] == '(') s2[++capat2] = '(';
else if(s[i] == ')')
{
while(s2[capat2] != '(')
{
capat1--;
if(s2[capat2] == '+') s1[capat1] = s1[capat1] + s1[capat1+1];
else if(s2[capat2] == '-') s1[capat1] = s1[capat1] - s1[capat1+1];
else if(s2[capat2] == '/') s1[capat1] = s1[capat1] / s1[capat1+1];
else if(s2[capat2] == '*') s1[capat1] = s1[capat1] * s1[capat1+1];
capat2--;
}
capat2--;
}
else
{
while(capat2 != -1 && s2[capat2] != '(' && Prioritate(s2[capat2]) >= Prioritate(s[i]))
{
capat1--;
if(s2[capat2] == '+') s1[capat1] = s1[capat1] + s1[capat1+1];
else if(s2[capat2] == '-') s1[capat1] = s1[capat1] - s1[capat1+1];
else if(s2[capat2] == '/') s1[capat1] = s1[capat1] / s1[capat1+1];
else if(s2[capat2] == '*') s1[capat1] = s1[capat1] * s1[capat1+1];
capat2--;
}
s2[++capat2] = s[i];
}
}
while(capat2 != -1)
{
capat1--;
if(s2[capat2] == '+') s1[capat1] = s1[capat1] + s1[capat1+1];
else if(s2[capat2] == '-') s1[capat1] = s1[capat1] - s1[capat1+1];
else if(s2[capat2] == '/') s1[capat1] = s1[capat1] / s1[capat1+1];
else if(s2[capat2] == '*') s1[capat1] = s1[capat1] * s1[capat1+1];
capat2--;
}
return s1[capat1];
}
struct Nod* ConstruiesteArbore(char* s, struct Nod *rad)
{
;
}
int Eval(struct Nod* rad)
{
if(strcmp(rad->informatie, "+") == 0) return Eval(rad->st) + Eval(rad->dr);
else if(strcmp(rad->informatie, "-") == 0) return Eval(rad->st) - Eval(rad->dr);
else if(strcmp(rad->informatie, "*") == 0) return Eval(rad->st) * Eval(rad->dr);
else if(strcmp(rad->informatie, "/") == 0) return Eval(rad->st) / Eval(rad->dr);
return atoi(rad->informatie);
}
int main()
{
/*
struct Nod* Radacina = ConstruiesteArbore((char*)("(1+2)*3-(1+2*3)"), Radacina);
printf("%d", Eval(Radacina));
*/
char* s = new char[100005];
cin.getline(s, 100005);
int y = TransfInFormaPoloneza(s);
cout << y;
return 0;
}
/*
70*(1071/(9291110/1696+276875)*4059+1106990)
77489300
*/