description
輸入乙個中綴算術表示式s,s中的運算元為0到9,只含+,-和*,/運算,也可能含有括號(),運算子的計算順序和實際四則運算的計算順序相同. 請輸出與s等價的字尾表示式,注意輸出結果不要含有多餘的括號或空格.
input
輸入有多組資料.
每組資料是乙個中綴表示式s,s的長度不超過50. 輸入的s保證合法,而且不包含多餘的空格或製表符.
輸入以#號結束.
output
對於每個中綴表示式,輸出轉換後的字尾表示式,每個輸出佔一行.
sample input
1 1+2*3
(1-2)/3
#sample output
1 123*+
12-3/
#include
#include
#include
#include
using
namespace
std;
bool isbetter(char a, char b)
int main() else else
if (input[i] == ')')
op.pop();// 將左括號彈出不輸出
} else else else }}
op.push(input[i]); // 將當前運算子入棧}}
} else }}
cout
<< endl;
} return
0;}
本題目將上面的轉換封裝為函式,並做了適當的處理以將不同的運算數分開
description
輸入中綴算術表示式s,s中的運算元為非負整數,只含+,-和*,/運算,也可能含有括號(),運算子的計算順序和實際四則運算的計算順序相同. 輸出表示式s的值. 注意除法運算只取整數部分,例如1/2=0.
input
輸入有多組資料.
每組資料是乙個算術表示式s,s的長度不超過100. 輸入的s保證合法,而且不包含多餘的空格或製表符. s的運算元、中間結果和最終結果都不會超過int型別的範圍,也不會出現除數為0的情況.
輸入以#號結束.
output
對於每個算術表示式s,輸出s的值,每個輸出佔一行.
sample input
1 478+522
(478+522)*10
1/2-1
#sample output
1 1000
10000
-1
#include
#include
using
namespace
std;
bool isbetter(char a, char b);
string topostifix(string input);
int calculate(int x, int y, char t_op);
int main()
} else else
// 遇到運算子,計算出新的值,然後入棧
int num1 = num.top();
num.pop();
int num2 = num.top();
num.pop();
int ans = calculate(num2, num1, postfix[i]);
num.push(ans);}}
}if (mark == 2) else
if (!num.empty())
}return0;}
bool isbetter(char a, char b)
int calculate(int x, int y, char t_op)
string topostifix(string input) else else
if (input[i] == ')')
op.pop();// 將左括號彈出不輸出
} else else
op.push(input[i]); // 將當前運算子入棧}}
}} else }}
return tmp;
}
中綴轉字尾及字尾求值
中綴表示式轉字尾表示式 include include include include include include includeusing namespace std const int maxn 1000 10 typedef char typename struct node typede...
c 實現中綴轉字首,中綴轉字尾,字尾表示式求值
思想 用兩個棧實現,規則如下 1 初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 2 從右至左掃瞄中綴表示式 3 遇到運算元時,將其壓入s2 4 遇到運算子時,比較其與s1棧頂運算子的優先順序 4 1 如果s1為空,或棧頂運算子為右括號 則直接將此運算子入棧 4 2 否則,若優先順序比棧頂運算子的...
逆波蘭中綴轉字尾表示式並求值
建立鏈棧 linkstack.h pragma once typedef int elemtype typedef struct node node typedef struct linkstack linkstack,ptrstack 初始化 void init ptrstack stack 入棧...