/*----------浮點求值運算器-----------*/
/*-------框架--------*/
/*1.判斷匹配
a.搞個臨時棧tmps存所有()
b.判斷tmps的匹配
遇到(進
遇到)若空,則假
若非空,即是(,則彈(;ch++
返回tmps空即是匹配真
2.總函式
1.若數字則s++,並後續,轉double,push
2.若字元switch優先順序,分別處理
a.<,push
b.=,pop,s++
c,>,雙目運算,push
*/#ifndef calculator_of_double_
#define calculator_of_double_
#includeusing namespace std;
class calculatorod;
#endif // !calculator_of_double_
#include"calculator_of_double.h"
#include#include#include#include#include#includecalculatorod::calculatorod(const char *chptr)
bool calculatorod::judgemarray()
} return tmps.empty();
}void calculatorod::calculat()
break;}}
while (isdigit(exparray[i]) || exparray[i] == '.')
}} int ival = 5;
printf("求得的結果是:%15.8lf\n\n", tmpdoubs.top());
}char calculatorod::orderbetween(char chstack, char chnew);
char chs = chstack;//'(';//----棧
char chcur = chnew;// ')';//----當前
int x, y;
for (int i = 0; i <= 9; i++)
if (symbolsheet[i][9] == chs)
for (int i = 0; i <= 9; i++)
if (symbolsheet[0][i] == chcur)
/*cout << endl << x << ',' << y << endl;
cout << symbolsheet[x][y] << endl;*/ //----測試用
return symbolsheet[x][y];
}double calculatorod::getresult(double d2, char syb, double d1)
return 0;//----無意義的,防止編譯警告無全部return
}int calculatorod::factorial(int ival)
#include#include"calculator_of_double.h"
#includeusing namespace std;
int main()/*--------以下可實現---------
"32^(1/5)^(1/2)" 得到1.41
"(1+2^3!-4)*(5!-(6-(7-(89-0!))))" 得到2013
"32.1^(1/5.09)^(1.19/2.13)" 得到1.46338
------以下風格不可實現-------
32^(-5)
-3+1
*/
php使用逆波蘭演算法實現四則運算器
逆波蘭表示法,俗稱字尾表示法。曾經被別人問過,四則運算器的實現,當時僅僅是算的兩個數的,週日研究了下四則運算表示式,看到逆波蘭演算法,從看演算法思路到實現並驗證花了近2個多小時,怕以後忘掉,所以記錄下來,放到工具包中。逆波蘭演算法思路,重點是理解大括號的壓棧和出棧,這裡就不細說了。有個部落格寫的不錯...
C 逆波蘭計算器程式
在逆波蘭表示法中,所有運算子都跟在運算元的後面。比如,下列中綴表示式 1 2 4 5 採用逆波蘭表示法表示為 1 2 4 5 while 下乙個運算子或運算元不是檔案結束指示符 if 是數 將該數壓入到棧中 else if 是運算子 彈出所需數目的運算元執行運算 將結果壓入到棧中 else if 是...
C 四則運算器
leetcode上的題,只有 空格,計算所給表示式的數值 我現在用的辦法是 中綴表示式轉字尾表示式,然後計算 但是leetcode最後乙個示例是長度為20w的表示式,直接給我弄超時了,先把 放在這裡吧 計算器 include include include includeusing namespac...