Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. #include<iostream>
  2. #include<cmath>
  3. #include<stack>
  4. #include<string>
  5.  
  6. using namespace std;
  7.  
  8. int is_it_num(char a){
  9. if ((a - '0') <= 9 && (a - '0') >= 0) return 1;
  10. else return 0;
  11. }
  12.  
  13. int num(char a){
  14. return a - '0';
  15. }
  16.  
  17. int do_it(char c, int a, int b){
  18. if(c == '+') return a + b;
  19. else if(c == '-') return a - b;
  20. }
  21.  
  22. int main(){
  23. string s;
  24. cin >> s;
  25.  
  26. stack<int> numbers;
  27. stack<char> operators;
  28.  
  29. if(is_it_num(s[0])) numbers.push(num(s[0]));
  30.  
  31. for(int i = 1; i < s.size(); ++i){ //если мы встретили цифру
  32. if (is_it_num(s[i]))
  33. if (is_it_num(s[i - 1])){
  34. int top = numbers.top();
  35. numbers.pop();
  36. numbers.push(top * 10 + num(s[i]));
  37. }
  38. else{
  39. numbers.push(num(s[i]));
  40. }
  41. else{ // если мы встретили оператор
  42. while ( !(operators.empty()) && (operators.top() != '(')){
  43. int top_1 = numbers.top();
  44. numbers.pop();
  45. int top_2 = numbers.top();
  46. numbers.pop();
  47. numbers.push(do_it(operators.top(), top_2, top_1));
  48. operators.pop();
  49. cout << "top = " << numbers.top() << endl;
  50. }
  51.  
  52.  
  53. if(s[i] == ')') {
  54. operators.pop();
  55. if (numbers.top() < 0){
  56. if(operators.top() == '-'){
  57. operators.pop();
  58. operators.push('+');
  59. int a = numbers.top();
  60. numbers.pop();
  61. numbers.push((-1)*a);
  62. }
  63. else{
  64. int a = numbers.top();
  65. numbers.pop();
  66. numbers.push((-1)*a);
  67. operators.pop();
  68. operators.push('-');
  69. }
  70. }
  71. }
  72. else {
  73. operators.push(s[i]);
  74. }
  75. }
  76. }
  77.  
  78. while (!(operators.empty())){
  79. int top_1 = numbers.top();
  80. numbers.pop();
  81. int top_2 = numbers.top();
  82. numbers.pop();
  83. numbers.push(do_it(operators.top(), top_2, top_1));
  84. operators.pop();
  85. }
  86.  
  87. cout << numbers.top() << endl;
  88.  
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement