Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. #include <string>
  2. #include <vector>
  3.  
  4. namespace numbers {
  5.     complex eval(const std::vector<std::string> &args, const complex &z) {
  6.         auto it = args.begin(), end = args.end();
  7.         complex_stack stack;
  8.         for (; it != end; ++it) {
  9.             if ((*it)[0] >= 'a' && (*it)[0] <= 'z') {
  10.                 stack = stack << z;
  11.                 continue;
  12.             }
  13.             complex c1, c2;
  14.             switch ((*it)[0]) {
  15.                 case '+':
  16.                     c1 = +stack;
  17.                     stack = ~stack;
  18.                     c2 = +stack;
  19.                     stack = ~stack;
  20.                     stack = stack << (c1 + c2);
  21.                     break;
  22.                 case '-':
  23.                     c1 = +stack;
  24.                     stack = ~stack;
  25.                     c2 = +stack;
  26.                     stack = ~stack;
  27.                     stack = stack << (c1 - c2);
  28.                     break;
  29.                 case '/':
  30.                     c1 = +stack;
  31.                     stack = ~stack;
  32.                     c2 = +stack;
  33.                     stack = ~stack;
  34.                     stack = stack << (c1 / c2);
  35.                     break;
  36.                 case '*':
  37.                     c1 = +stack;
  38.                     stack = ~stack;
  39.                     c2 = +stack;
  40.                     stack = ~stack;
  41.                     stack = stack << (c1 * c2);
  42.                     break;
  43.                 case '!':
  44.                     c1 = +stack;
  45.                     stack = stack << c1;
  46.                     break;
  47.                 case ';':
  48.                     stack = ~stack;
  49.                     break;
  50.                 case '~':
  51.                     c1 = +stack;
  52.                     stack = ~stack;
  53.                     stack = stack << (~c1);
  54.                     break;
  55.                 case '#':
  56.                     c1 = +stack;
  57.                     stack = ~stack;
  58.                     stack = stack << (-c1);
  59.                     break;
  60.                 default:
  61.                     stack = stack << complex(*it);
  62.             }
  63.         }
  64.         return +stack;
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement