算術表示式有字首表示法、中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2+3*(7-4)+8/4
的字首表示式是:+ + 2 * 3 - 7 4 / 8 4
。請設計程式計算字首表示式的結果值。
輸入在一行內給出不超過30個字元的字首表示式,只包含+
、-
、*
、/
以及運算數,不同物件(運算數、運算符號)之間以空格分隔。
輸出字首表示式的運算結果,保留小數點後1位,或錯誤資訊error
。
+ + 2 * 3 - 7 4 / 8 4
13.0
解析字首表示式並計算值的方法為:從右往左讀取式子,如果遇到數字那麼就入棧,如果遇到運算子,就從棧中彈出兩個數字a和b,其中a為棧頂元素,計算完成後再壓入棧中。
這道題需要注意的點是:
1. 結算結果需要保留一位小數,所以應該用double型記錄結果
2. 數字有可能是小數
3. 當進行運算子運算的時候如果棧中沒有兩個元素則返回error;當進行除法運算的時候如果b=0則返回error
#include #include #include #include using namespace std;
#define maxsize 1010
char exp[maxsize];
int idx=0;
stacknum; //存數字的堆疊
int isdigit(char a) else
}int main()
for(int j=idx-1; j>=0; j--) else if(exp[j] == '+') else if(isdigit(exp[j])) else if(exp[j]=='.')
j--;
}num.push(outcome);
j++;
} else if(exp[j]=='+' || exp[j]=='-' || exp[j]=='*' || exp[j]=='/')
a = num.top();
num.pop();
if(num.empty())
b = num.top();
num.pop();
double outcome = 0;
switch(exp[j])
outcome = a/b;
break;
default:
break;
}num.push(outcome);
} }if(num.size()!=1) else
return 0;
}
7 21 求字首表示式的值(25 分)
stack用法詳解 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2 3 7 4 8 4的字首表示式是 2 3 7 4 8 4。請設計程式計算字首表示式的結果值。輸入在一行內給出不超過30個字元的字首表示式,只包含 以及運算數,不同物件 運算數 ...
7 21 求字首表示式的值 25分
pta資料結構與演算法題目集 7 21 求字首表示式的值 25分 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2 3 7 4 8 4的字首表示式是 2 3 7 4 8 4。請設計程式計算字首表示式的結果值。輸入在一行內給出不超過30個字元的字首...
pta7 21 求字首表示式的值
東軟學習小組成員 夜楓 題目 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2 3 7 4 8 4的字首表示式是 2 3 7 4 8 4。請設計程式計算字首表示式的結果值。輸入格式 輸入在一行內給出不超過30個字元的字首表示式,只包含 以及運算數...