逆波蘭運算式計算,該如何解決

來源:互聯網
上載者:User
逆波蘭運算式計算
最近在整理資料時發現了一些以前收藏的有趣代碼
計劃逐步將他們移植到 PHP 供有興趣的人蔘考
PHP code
/** * 逆波蘭運算式計算 * 中綴轉尾碼 **/function postfix($infix) {    $priority = array( //算符優先順序        '+' => 1, '-' => 1,        '*' => 2, '/' => 2,        '(' => 0, ')' => 0,        '.' => 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0        );    $stack = array(); //符號棧    $data = array(); //數值棧     $i = $top = 0;    $last = -1;    $len = strlen($infix);    while($i<$len) {        switch($infix{$i}) {            case '(':                array_unshift($stack, $infix{$i});                break;            case '+': case '-': case '*': case '/':                if($t != '') array_unshift($data, $t);                $t = '';                while($priority[$stack[0]] >= $priority[$infix{$i}]) {                    postfix_callback(array_shift($stack), $data);                }                array_unshift($stack, $infix{$i});                break;            case ')':                if($t != '') array_unshift($data, $t);                $t = '';                while($stack[0] != '(') {                    postfix_callback(array_shift($stack), $data);                }                array_shift($stack);                break;            default:                if($i > $last+1 && $t != '') {                    array_unshift($data, $t);                    $t = '';                }                $t .= $infix{$i};                $last = $i;                break;         }        $i++;    }    while($stack) {        postfix_callback(array_shift($stack), $data);    }    return $data[0];}/** * postfix 的工作函數 * 用於計算運算式的值 **/function postfix_callback($ch, &$data) {    $b = array_shift($data);    switch($ch) {        case '+':            $data[0] += $b;            break;        case '-':            $data[0] -= $b;            break;        case '*':            $data[0] *= $b;            break;        case '/':            $data[0] /= $b;            break;    }}
測試例
PHP code
echo postfix( '(2+3)*(3+4)' ); //out 35


------解決方案--------------------
先回貼在看
------解決方案--------------------
這個好東西。

------解決方案--------------------
前排佔座, 板主老大給力.
------解決方案--------------------
前排佔座, 板主老大給力.
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.