前提・実現したいこと
実行したコードは最下部にあります(不要な行は削除してあります)。
stackで逆ポーランド記法の問題を解くプログラムで、引き算のとき、
例えば入力として 4 3 -
が与えられたとして、
push(pop() - pop())
と push(-(pop() - pop()))
の結果が同じで困惑しています。
どちらも1と表示されます。
なぜ、結果が変わらないのか分かりますでしょうか。
該当行を、
c++
1int a = pop(); 2int b = pop(); 3push(b - a);
に置き換えると、意図したとおりに動くので、関数の実行順序が問題になっているものと思われるのですが。。。
c++
1#include <bits/stdc++.h> 2using namespace std; 3 4const int MAX = 101; 5int top = 0; 6int S[MAX]; 7 8void push(int); 9int pop(); 10 11int main() { 12 char s[10]; 13 while (scanf("%s", s) != EOF) { 14 if (s[0] == '-') { 15 16 // 問題の行 17 push(pop() - pop()); 18 19 } else { 20 push(atoi(s)); 21 } 22 } 23 cout << pop() << endl; 24} 25 26void push(int x) { 27 S[++top] = x; 28} 29int pop() { 30 return S[top--]; 31}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/30 06:11