前提・実現したいこと
スタックによる四則演算(逆ポーランド記法)の出力
発生している問題・エラーメッセージ
入力:12+34ー*
目的の出力:((1+2)*(3−4)を想定して)ー3
実際の出力:−99
該当のソースコード
using System; namespace ALDS13A { class Program { static int top; static int[] stacks; static void Push(int ch) { stacks[++top] = ch; } static int Pop() { top--; return stacks[top+1]; } static void Main(string[] args) { top = 0; stacks = new int[100]; int a, b; var str = "12+34-*"; foreach (var ch in str) { if (ch == '+') { a = Pop(); b = Pop(); Push(b + a); } else if (ch == '-') { a = Pop(); b = Pop(); Push(b - a); } else if (ch == '*') { a = Pop(); b = Pop(); Push(b * a); } else if (ch == '/') { a = Pop(); b = Pop(); Push(b / a); } else { Push(ch); } } Console.WriteLine(Pop()); } } }
補足情報(FW/ツールのバージョンなど)
環境:Visual Studio for mac (8.6.1(build 26))
Push(ch) で文字 '1' や '2' などを int に変換したものではなく、文字コードがそのまま push されているのでは。
回答3件
あなたの回答
tips
プレビュー