fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #include <iostream>
  5. #include <stack>
  6. #include <sstream>
  7.  
  8. using namespace std;
  9.  
  10. int evaluateRPN(const string& expression) {
  11. stack<int> s;
  12. stringstream ss(expression);
  13. string token;
  14.  
  15. while (ss >> token) {
  16. if (isdigit(token[0]) || (token.size() > 1 && token[0] == '-')) {
  17. s.push(stoi(token));
  18. } else {
  19. int b = s.top(); s.pop();
  20. int a = s.top(); s.pop();
  21. int result;
  22.  
  23. switch (token[0]) {
  24. case '+': result = a + b; break;
  25. case '-': result = a - b; break;
  26. case '*': result = a * b; break;
  27. case '/': result = a / b; break;
  28. default: throw invalid_argument("Невідомий оператор");
  29. }
  30. s.push(result);
  31. }
  32. }
  33.  
  34. return s.top();
  35. }
  36.  
  37. int main() {
  38. string expression;
  39. getline(cin, expression);
  40.  
  41. try {
  42. cout << evaluateRPN(expression) << endl;
  43. } catch (const exception& e) {
  44. cerr << "Помилка: " << e.what() << endl;
  45. }
  46.  
  47. return 0;
  48. }
  49.  
Success #stdin #stdout 0.01s 5308KB
stdin
2 4 * 8 + 
stdout
16