Pagini recente » Cod sursa (job #2365269) | Cod sursa (job #311560) | Cod sursa (job #1288344) | Cod sursa (job #1062582) | Cod sursa (job #3216845)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
int get_num(int& i) {
string num;
while (isdigit(s[i])) {
num.push_back(s[i]);
++i;
}
--i;
return stoi(num);
}
int compute(vector<int>& nums, vector<char>& ops) {
for (int i = 0; i < ops.size(); ++i) {
if (ops[i] == '*') {
nums[i] *= nums[i + 1];
nums.erase(nums.begin() + i + 1);
ops.erase(ops.begin() + i);
--i;
}
else if (ops[i] == '/') {
nums[i] /= nums[i + 1];
nums.erase(nums.begin() + i + 1);
ops.erase(ops.begin() + i);
--i;
}
}
for (int i = 0; i < ops.size(); ++i) {
if (ops[i] == '-') {
nums[i + 1] *= -1;
}
}
int sum = 0;
for (auto num : nums) {
sum += num;
}
return sum;
}
int calc(int& i) {
vector<int> nums;
vector<char> ops;
while (i < s.size()) {
if (s[i] == ')') {
return compute(nums, ops);
}
else if (s[i] == '(') {
++i;
nums.push_back(calc(i));
}
else if (isdigit(s[i])) {
nums.push_back(get_num(i));
}
else {
ops.push_back(s[i]);
}
++i;
}
return compute(nums, ops);
}
int main()
{
getline(fin, s);
int i = 0;
fout << calc(i);
return 0;
}