麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > PHP > 正文

PHP使用逆波蘭式計算工資的方法

2024-05-04 23:38:20
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了PHP使用逆波蘭式計算工資的方法,實例分析了php逆波蘭式算法的原理與相關使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了PHP使用逆波蘭式計算工資的方法。分享給大家供大家參考。具體如下:

將一個普通的中序表達式轉換為逆波蘭表達式的一般算法是:

首先需要分配2個棧,一個作為臨時存儲運算符的棧S1(含一個結束符號),一個作為輸入逆波蘭 式的棧S2(空棧),S1棧可先放入優先級最低的運算符#,注意,中綴式應以此最低優先級的運算符結束。可指定其他字符,不一定非#不可。從中綴式的左端 開始取字符,逐序進行如下步驟:

(1)若取出的字符是操作數,則分析出完整的運算數,該操作數直接送入S2棧;若取出的是運算符,并且當前S1棧頂為(,則當前運算符直接入S1棧。

(2)若取出的字符是運算符,則將該運算符與S1棧棧頂元素比較,如果該運算符優先級大于S1棧棧頂運算符優先級,則將該運算符進S1棧,否者,將S1棧的棧頂運算符彈出,送入S2棧中,直至S1棧棧頂運算符低于(不包括等于)該運算符優先級,則將該運算符送入S1棧。

(3)若取出的字符是“(”,則直接送入S1棧棧頂。

(4)若取出的字符是“)”,則將距離S1棧棧頂最近的“(”之間的運算符,逐個出棧,依次送入S2棧,此時拋棄“(”。

(5)重復上面的1~4步,直至處理完所有的輸入字符

(6)若取出的字符是“#”,則將S1棧內所有運算符(不包括“#”),逐個出棧,依次送入S2棧。

完成以上步驟,S2棧便為逆波蘭式輸出結果。不過S2應做一下逆序處理。便可以按照逆波蘭式的計算方法計算了!

math_rpn.php文件如下:

 

 
  1. <?php 
  2. /** 
  3. * math_rpn  
  4. * 
  5. * 實現逆波蘭式算法 
  6.  
  7. */ 
  8. class math_rpn { 
  9. //初始的計算表達式 
  10. private $_expression = ''
  11. //處理后的逆波蘭表達式 
  12. private $_rpnexp = array(); 
  13. //模擬棧結構的數組 
  14. private $_stack = array('#'); 
  15. //正則判斷 
  16. //private $_reg = '/^([A-Za-z0-9/(/)/+/-/*//])*$/'; 
  17. //優先級 
  18. private $_priority = array('#' => 0, '(' => 10, '+' => 20, '-' => 20, '*' => 30, '/' => 30); 
  19. //四則運算 
  20. private $_operator = array('(''+''-''*''/'')'); 
  21. public function __construct($expression) { 
  22. $this->_init($expression); 
  23. private function _init($expression) { 
  24. $this->_expression = $expression
  25. public function exp2rpn() { 
  26. $len = strlen($this->_expression); 
  27. for($i = 0; $i < $len$i++) { 
  28. $char = substr($this->_expression, $i, 1); 
  29. if ($char == '(') { 
  30. $this->_stack[] = $char
  31. continue
  32. else if ( ! in_array($char$this->_operator)) { 
  33. $this->_rpnexp[] = $char
  34. continue
  35. else if ($char == ')') { 
  36. for($j = count($this->_stack); $j >= 0; $j--) { 
  37. $tmp = array_pop($this->_stack); 
  38. if ($tmp == "(") { 
  39. break;  
  40. else { 
  41. $this->_rpnexp[] = $tmp
  42. continue
  43. else if ($this->_priority[$char] <= $this->_priority[end($this->_stack)]) { 
  44. $this->_rpnexp[] = array_pop($this->_stack); 
  45. $this->_stack[] = $char
  46. continue
  47. else { 
  48. $this->_stack[] = $char
  49. continue
  50. for($i = count($this->_stack); $i >= 0; $i--) { 
  51. if (end($this->_stack) == '#'break
  52. $this->_rpnexp[] = array_pop($this->_stack);  
  53. return $this->_rpnexp; 
  54. //測試實例 
  55. $expression = "(A*(B+C)-E+F)*G"
  56. var_dump($expression); 
  57. $mathrpn = new math_rpn($expression); 
  58. var_dump($mathrpn->exp2rpn()); 
  59. /*End of php*/ 

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久综合久久综合久久综合 | 伊人一二三四区 | 欧美日韩成人一区二区 | 欧美老外a级毛片 | 五月激情久久 | 免费观看一级欧美大 | 国产91av视频 | 欧美一级全黄 | 亚洲一区二区免费 | 国产精选电影免费在线观看 | qyl在线视频精品免费观看 | 亚洲国产综合在线观看 | 爱高潮www亚洲精品 国产精品一区自拍 | 久久亚洲国产精品 | 免费观看一级黄色片 | 亚洲婷婷日日综合婷婷噜噜噜 | 久久精品视频在线免费观看 | 欧美日韩成人一区二区 | 黄色特级片黄色特级片 | 99国产精品自拍 | 中文区中文字幕免费看 | 一级毛片免费一级 | 黄色高清免费 | 伊人网站 | 美女av在线免费观看 | 欧洲精品久久 | 欧美亚洲国产一区 | 极品国产91在线网站 | 国产一级一片免费播放 | 亚洲日本韩国精品 | 国产成人高清成人av片在线看 | 日韩激情一区 | 密室逃脱第一季免费观看完整在线 | 91情侣在线偷精品国产 | 毛片视频大全 | 欧美一级黄色录相 | 久久免费视频3 | h视频免费在线观看 | 久久久久久久免费看 | 欧美亚洲国产成人 | 男男啪羞羞视频网站 |