この記事では、PHP が逆ポーランド法を使用して賃金を計算する例について説明します。皆さんの参考に共有してください。詳細は以下の通りです
通常の inorder 式を逆ポーランド式に変換するための一般的なアルゴリズムは次のとおりです:
まず、2 つのスタックを割り当てる必要があります。1 つは一時記憶オペレーター スタック S1 (ターミネーターを含む) として、もう 1 つは入力リバース ポリッシュ スタック S2 (空のスタック) として、S1 スタックは最も低いオペレーターに配置できます。 # 、中置式は優先順位の最も低い演算子で終わる必要があることに注意してください。 # である必要はなく、他の文字も指定できます。中置数式の左端から始めて、文字を取り出して、次のように 1 つずつ進めます:
(1) 取り出された文字がオペランドの場合、完全なオペランドが分析され、取り出された文字が演算子であり、S1 スタックの現在の先頭が S2 スタックに直接送信されます。 (、現在のオペレーターは S2 スタックに直接送信されます。S1 スタック。
(2) 取り出した文字が演算子の場合、その演算子とS1スタックの先頭要素を比較し、その演算子の優先度がS1スタックの先頭の演算子の優先度よりも大きい場合、その演算子を置きます。それ以外の場合は、S1 スタックの最上位のオペレーターをポップし、S1 スタックの最上位のオペレーターがそのオペレーターの優先順位よりも低くなるまで (等しい場合を除く)、S2 スタックに送信します。 S1 スタックに追加します。
(3) 取り出した文字が「(」の場合は、そのままS1スタックの先頭に送られます。
(4) 取り出した文字が「)」の場合、S1スタックの先頭に近い「(」の間の演算子を1つずつ取り出して順番にS2スタックに送ります。 「(」は破棄されます。(5) すべての入力文字が処理されるまで、上記の手順 1 ~ 4 を繰り返します
(6) 取り出した文字が「#」の場合、S1スタックにあるすべての演算子(「#」を除く)を1つずつスタックから取り出し、順番にS2スタックに送ります。
上記の手順を完了すると、S2 スタックは結果を逆ポーランド語形式で出力します。ただし、S2 は逆の処理を行う必要があります。その後、逆ポーランドの計算方法に従って計算できます。
math_rpn.php ファイルは次のとおりです:
リーリー
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。