題目:http://pta.patest.cn/pta/test/15/exam/4/question/836
PTA - 數據結構與算法(中文) - 5-21
算術表達式有前綴表示法、中綴表示法和后綴表示法等形式。前綴表達式指二元運算符位於兩個運算數之前,例如2+3*(7-4)+8/4的前綴表達式是:+ + 2 * 3 - 7 4 / 8 4。請設計程序計算前綴表達式的結果值。
輸入格式說明:
輸入在一行內給出不超過30個字符的前綴表達式,只包含+、-、*、\以及運算數,不同對象(運算數、運算符號)之間以空格分隔。
輸出格式說明:
輸出前綴表達式的運算結果,精確到小數點后1位,或錯誤信息“ERROR”。
樣例輸入與輸出:
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; double exp() //!返回前綴表達式的值 { char a[10]; //!用於存儲第一個非空格字符 cin >> a; if(!a[1]) { //!a[1]為空,只有一位,即運算符或者數字0-9 switch(a[0]) { //!遞歸 case '+': return exp() + exp(); case '-': return exp() - exp(); case '*': return exp() * exp(); case '/': { double fenzi=exp(); double fenmu=exp(); if(fenmu!=0) return fenzi / fenmu; else{ cout << "ERROR"; exit(0); //!程序結束 } } default : return atof(a); //!將字符串轉化成浮點數 } } else { //!a[1]不為空,不是運算符,是操作數 if(a[0]=='-' || a[0]=='+') //!帶符號的數 { char flag=a[0]; //!記錄符號 int i=0; while(a[i]){ //!覆蓋符號 a[i]=a[i+1]; i++; } if(flag=='-') return 0-atof(a); else return atof(a); } else //!不帶符號的數 return atof(a); } } int main() { printf("%.1f",exp()); //!保留一位小數 return 0; }