解題思路:這個題wa了一次,腦子不機密。。。。。兩個棧,乙個棧儲存運算符號,乙個儲存運算元。遇到運算元就壓進運算元的棧,遇到運算子就看如果是+-的話就把之前的全部運算子一一退棧,每退乙個從運算元中取兩個數做計算,再將結果再壓回運算元的棧內。如果是*/的話,如果之前的操作符也是*/的話那就個上面一樣方法。如果操作符棧沒有元素就直接壓進棧中。最後掃瞄完算式之後,將剩餘操作符一一出棧運算,最後運算元棧中會剩餘乙個元素。那就是結果。如果有括號的話,左括號直接入棧,遇到右括號的話就相當於一小段式子結束,按上面的處理,直到遇到左括號。
#include#include#include#include#include#define max 220
using namespace std;
char s[max];
stacknum;
stackcal;
double getans(double l, double r, char c)
else if(c == '-')
else if(c == '*')
else
} int main()
bool flag = true;
i = 0;
while(i < strlen(s))
else
flag = false;
}else
cal.push(ch);
}if((ch == '*' || ch == '/'))
cal.push(ch);
}i += 2;
flag = true;}}
while(!cal.empty())
printf("%.2lf\n", num.top());
num.pop();
}
return 0;
}
hdu1237 簡單計算器
模擬棧運算,其實遞迴也可以,不過我夠嗆能寫的出來 其實老早就看過表示式求值的問題,只不過一直沒有敲過,今天敲了一下,發現還是有不少問題的 code include include include using namespace std bool check char,char void solve ...
hdu 1237 簡單計算器
模擬棧。設兩個陣列,乙個裝運算元,乙個裝操作符。根據優先順序,先乘除,後加減。include include include include char s 210 op 200 s1 200 double a 200 int char num char s1,int n 字串轉化成int型數 ret...
HDU1237 簡單計算器
problem description 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。output 對每個測試用例...