【計算機演算法】 求字首表示式的值
【計算機演算法】 求字首表示式的值
算術表示式有字首表示法、中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2+3*(7-4)+8/4的字首表示式是:+ + 2 * 3 - 7 4 / 8 4。請設計程式計算字首表示式的結果值。
輸入格式:
輸入在一行內給出不超過30個字元的字首表示式,只包含+、-、*、/以及運算數,不同物件(運算數、運算子號)之間以空格分隔。
輸出格式:
輸出字首表示式的運算結果,保留小數點後1位,或錯誤資訊ERROR。
輸入樣例:
+ + 2 * 3 - 7 4 / 8 4
輸出樣例:
13.0
程式碼:
#include <iostream>
#include <cstdio>
#include <string>
#include <stack>
#include <stdlib.h>
using namespace std;
int main()
{
stack <double> q;
string a[30]; //存字元
bool error = 0; //錯誤資訊
int n = 0; //字元個數
while(cin>>a[n++])//讀到檔案結尾自動結束
{
}
n=n-1;//n是個數,需要減一
for(int i = n-1; i>=0; i--)
{
///如果是符號
if(a[i].length() == 1 && (a[i][0]== '+' || a[i][0]=='-' || a[i][0]=='*' || a[i][0]=='/'))
{
if(q.size()<2)
{
error = 1;
break;
}
double aa = q.top();
q.pop();
double bb = q.top();
q.pop();
if(a[i][0]== '+')
q.push(aa+bb);
else
if(a[i][0]== '-')
q.push(aa-bb);
else
if(a[i][0]== '*')
q.push((aa*bb));
else if(a[i][0]== '/')
{
if(bb==0)
{
error = 1; break;
}
q.push(aa/bb);
}
}
else
{
double x = atof(a[i].c_str()); //c_str() 函式是轉化為字元陣列;atof() 是c中將字元陣列轉化為浮點型資料函式
q.push(x);
}
}
if(error)
printf("ERROR\n");
else
printf("%.1f\n",q.top());
return 0;
}
相關文章
- 【資料結構與演算法】中綴表示式轉字尾表示式以及字尾表示式的計算資料結構演算法
- 計算機資料的表示計算機
- 計算中綴表示式
- 表示式計算(棧的應用)
- 演算法~簡單的計算器(驗證數學表示式是否合法~“狀態機思想”)演算法
- 一個數學表示式的計算
- 字首中綴字尾表示式規則
- 將算數表示式轉換成字尾表示式並計算結果
- 計算機組成與體系結構-數值表示範圍-浮點數計算計算機
- 計算機程式的思維邏輯 (88) – 正規表示式 (上)計算機
- 計算機中數值和字串怎麼用二進位制表示?計算機字串
- 計算機演算法計算機演算法
- 圖解計算機中的資料表示形式圖解計算機
- 浮點數在計算機底層的表示及運算計算機
- 使用棧結構計算中綴表示式
- 計算機系統002 – 數值運算計算機
- C#資料結構與演算法系列(十):逆波蘭計算器——逆波蘭表示式(字尾表示式)C#資料結構演算法
- C#字尾表示式解析計算字串公式C#字串公式
- 2. 計算機怎麼表示數字計算機
- 陣列操作,計算組元素的極值函式陣列函式
- 逗號表示式返回值
- 2.Vue插值表示式Vue
- 表示式的動態解析和計算,Flee用起來真香
- matlab符號函式的求導與差分的計算Matlab符號函式求導
- 使用棧實現表示式求值,運用棧計算
- 算數表示式求值--c語言課程設計C語言
- leetcode 224. 基本計算器(逆波蘭表示式)LeetCode
- c++虛擬函式實現計算表示式子C++函式
- 怎樣用一個佇列和一個棧實現求一個表示式的值?佇列
- 從規範看賦值表示式的解析賦值
- 計算機系應屆生求職指北計算機求職
- 初探計算機網路之HTTPS請求計算機網路HTTP
- vue.js插值與表示式Vue.js
- 【計算機基礎】我講大致講清了資料的表示計算機
- 【演算法】字首樹演算法
- C/C++ 陣列連結串列表示式計算C++陣列
- 雲端計算開發教程:Python運算子與表示式Python
- js實現四則計算(中綴,字尾表示式)JS