Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cmath>
- #include<stack>
- #include<string>
- using namespace std;
- int is_it_num(char a){
- if ((a - '0') <= 9 && (a - '0') >= 0) return 1;
- else return 0;
- }
- int num(char a){
- return a - '0';
- }
- int do_it(char c, int a, int b){
- if(c == '+') return a + b;
- else if(c == '-') return a - b;
- }
- int main(){
- string s;
- cin >> s;
- stack<int> numbers;
- stack<char> operators;
- if(is_it_num(s[0])) numbers.push(num(s[0]));
- else operators.push(s[0]);
- for(int i = 1; i < s.size(); ++i){ //если мы встретили цифру
- if (is_it_num(s[i])){
- if (is_it_num(s[i - 1])){
- int top = numbers.top();
- numbers.pop();
- numbers.push(top * 10 + num(s[i]));
- }
- else{
- numbers.push(num(s[i]));
- }
- }
- else{ // если мы встретили оператор
- while ( !(operators.empty()) && (operators.top() != '(')){
- int top_1 = numbers.top();
- numbers.pop();
- int top_2 = numbers.top();
- numbers.pop();
- numbers.push(do_it(operators.top(), top_2, top_1));
- operators.pop();
- cout << "top = " << numbers.top() << endl;
- }
- if(s[i] == ')') {
- operators.pop();
- if (numbers.top() < 0){
- if(operators.top() == '-'){
- operators.pop();
- operators.push('+');
- int a = numbers.top();
- numbers.pop();
- numbers.push((-1)*a);
- }
- else if (operators.top() == '+'){
- int a = numbers.top();
- numbers.pop();
- numbers.push((-1)*a);
- operators.pop();
- operators.push('-');
- }
- }
- }
- else {
- operators.push(s[i]);
- cout << s[i] << endl;
- }
- }
- }
- while (!(operators.empty()) && !(numbers.empty())){
- int top_1 = numbers.top();
- numbers.pop();
- int top_2 = numbers.top();
- numbers.pop();
- numbers.push(do_it(operators.top(), top_2, top_1));
- operators.pop();
- }
- cout << numbers.top() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement