中綴表示式求值有兩種方法,一是轉成字尾表示式並求值,二是遞迴求值;
本題有多餘括號,第一種方法較好,一開始在數值棧中加入 0
00,防止讀入的第乙個數值是負數。
#include
#include
#include
using
namespace std;
const
int maxn =35;
char s[maxn]
;stack<
int> nums;
stack<
char
> opts;
inline
intqpow
(int a,
int b)
return ans;
}inline
intgrade
(char opt)
inline
void
calc
(char opt)
intmain()
if(s[i]
=='('
) opts.
push
(s[i]);
else
if(s[i]
==')'
)else
}while
(!opts.
empty()
&& opts.
top()!=
'('&& opts.
top()!=
')')
calc
(opts.
top())
, opts.
pop();
printf
("%d"
, nums.
top())
;return0;
}
// 本題只有60分
#include
#include
const
int maxn =35;
inline
intqpow
(int a,
int b)
return ans;
}char s[maxn]
;int
calc
(int l,
int r)
for(
int i = r, j =
0; i >= l;
--i)
for(
int i = r, j =
0; i >= l;
--i)
if(s[l]
=='('
&& s[r]
==')'
)return
calc
(l +
1, r -1)
;int num =0;
for(
int i = l; i <= r;
++i)
num = num *
10+ s[i]
-'0'
;return num;
}int
main()
表示式計算4(棧)
題目描述 給出乙個表示式,其中運算子僅包含 加 減 乘 整除 乘方 要求求出表示式的最終值 資料可能會出現括號情況,還有可能出現多餘括號情況 資料保證不會出現 geq 2 的答案資料保證不會出現 2 31的答案 資料可能會出現負數情況 輸入描述 僅一行,即為表示式 輸出描述 僅一行,既為表示式算出的...
計算表示式 棧
問題 現在有乙個合法的二進位制表示式,請計算出該表示式的值 input 輸入一行字串,表示乙個二進位制表示式。長度不超過 100,000 ouput 輸出表示式的值 input output 0 1 0 1 1 0 1 1 兩種方法 1 被動 遇到右括號再進行運算,直至左括號 include inc...
表示式計算4
給出乙個表示式,其中運算子僅包含 要求求出表示式的最終值,資料可能會出現括號情況,還有可能出現多餘括號情況資料保證不會出現 maxlongint的資料,資料可能會出現負數情況 僅一行,即為表示式 僅一行,既為表示式算出的結果 2 2 1 1 16 表示式總長度 30 轉變為 將乙個中序表示式轉化成為...