Pagini recente » Cod sursa (job #2254526) | Cod sursa (job #87353) | Cod sursa (job #2228224) | Cod sursa (job #429761) | Cod sursa (job #2965009)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string v = "(", aux;
int poz = 1;
long long adunScad(int& i);
long long inmulImpar(int& i, long long rez);
long long termen(int& i);
int main()
{
fin >> aux;
v += aux + ")";
fout << adunScad(poz);
return 0;
}
long long adunScad(int& i){
long long rez = 0;
while(v[i] != ')'){
rez += termen(i);
}
i++;
return rez;
}
long long inmulImpar(int& i, long long rez){
long long aux = 0;
while(v[i] == '*' || v[i] == '/'){
char semn = v[i];
i++;
aux = termen(i);
if(semn == '*'){
rez *= aux;
}else{
rez /= aux;
}
}
return rez;
}
long long termen(int& i){
long long rez = 0;
char semn;
bool eInmul = 0;
semn = v[i];
if(v[i-1] == '*' || v[i-1] == '/')
eInmul = 1;
if('0' <= semn && semn <= '9'){
semn = '+';
}else if(semn == '('){
semn = '+';
}else{
i++;
}
while('0' <= v[i] && v[i] <= '9'){
rez = rez*10 + v[i] - '0';
i++;
}
if(v[i] == '('){
rez += adunScad(++i);
}
if((v[i] == '*' || v[i] == '/') && !eInmul){
rez = inmulImpar(i, rez);
}
if(semn == '+' || semn == '*'){
return rez;
}else{
return -rez;
}
}