Pagini recente » Cod sursa (job #1612014) | Cod sursa (job #899305) | Cod sursa (job #1990821) | Cod sursa (job #2665938) | Cod sursa (job #2869915)
#include <fstream>
using namespace std;
string s;
int last;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int doOp(char ch, int num, int val){
if(ch == '*') val *= num;
if(ch == '+') val += num;
if(ch == '/') val /= num;
if(ch == '-') val -= num;
return val;
}
int solve(int poz){
char semn = '+';
poz++;
int val = 0;
for(int i = poz; i < s.size(); i ++){
if(s[i]>= '0' && s[i] <= '9'){
int num = 0;
while(s[i] >= '0' && s[i] <= '9'){
num *= 10;
num += s[i] - '0';
i++;
}
i--;
val = doOp(semn, num, val);
}
if(s[i] == '*'){
semn = s[i];
}
if(s[i] == '/'){
semn = s[i];
}
if(s[i] == '+'){
semn = s[i];
int num = solve(i);
i = last;
val = doOp(semn, num, val);
if(s[i] == ')')
i--;
}
if(s[i] == '-'){
semn = s[i];
int num = solve(i);
i = last;
val = doOp(semn, num, val);
if(s[i] == ')')
i--;
}
if(s[i] == '('){
int num = solve(i);
i = last;
val = doOp(semn, num, val);
}
if(s[i] == ')'){
last = i;
return val;
}
last = i;
}
return val;
}
int main()
{
cin >> s;
char semn = '+';
int val = 0;
for(int i = 0; i < s.size(); i ++){
if(s[i]>= '0' && s[i] <= '9'){
int num = 0;
while(s[i] >= '0' && s[i] <= '9'){
num *= 10;
num += s[i] - '0';
i++;
}
i--;
val = doOp(semn, num, val);
}
if(s[i] == '*'){
semn = s[i];
}
if(s[i] == '/'){
semn = s[i];
}
if(s[i] == '+'){
semn = s[i];
int num = solve(i);
i = last;
val = doOp(semn, num, val);
}
if(s[i] == '-'){
semn = s[i];
int num = solve(i);
i = last;
val = doOp(semn, num, val);
}
if(s[i] == '('){
int num = solve(i);
i = last;
val = doOp(semn, num, val);
}
}
cout << val;
return 0;
}