前言
「北有玄武盾,南有雀攻法,東有青龍唾,西有虎焰擊,中有沙婆星,層層裝置,步步為營。 」歡迎來到嘟嘟課堂,今天,嘟嘟老師講一道關於棧的題——表示式求值。
題目描述
給定乙個只包含加法和乘法的算術表示式,請你程式設計計算表示式的值。
輸入
輸入檔案為expr.in。
輸入僅有一行,為需要你計算的表示式,表示式中只包含數字、加法運算子「+」和乘法運算子「」,且沒有括號,所有參與運算的數字均為0 到231-1 之間的整數。輸入資料保證這一行只有0~ 9、+、*這12 種字元。
輸出
輸出檔名為expr.out。
輸出只有一行,包含乙個整數,表示這個表示式的值。注意:當答案長度多於4 位時,請只輸出最後4 位,前導0 不輸出。
樣例輸入1
1+1*3+4
樣例輸出1
8樣例輸入2
1+1234567890*1
樣例輸出2
7891
樣例輸入3
1+1000000003*1
樣例輸出3
4樣例說明
樣例 1計算 的結果 為 8, 直接輸出 8。
樣例 2計算 的結果為1234567891 ,輸出後 4位,即 7891 。
樣例 3計算的結果為 1000000004 ,輸出後 4位,即 4。
資料範圍限制
對於 30% 的資料, 0≤表示式中加法 運算 符和乘法 運算 符的總數 ≤100 ;
對於 80% 的資料, 0≤表示式中加法 運算 符和乘法運算 符的總數 ≤1000 ;
對於 100% 的資料, 0≤表示式中加法 運算 符和乘法運算 符的總數 ≤100000。
思路
此題我們可以用暴力來搞,但是會很複雜。這時候我們就想到了棧。棧是一種資料結構,像樹、佇列一樣。棧也有個特點,就是只能先進先出,每次出棧只能從棧頂元素開始。那麼這道題卻很符合棧的性質。我們乙個乙個字元讀入,如果這個字元是+,那麼我們就把加好存進b陣列裡;如果這個字元是數字,那就將這個數字存入a陣列裡;如果這個字元是*,那麼就將乘號兩邊的數相乘,變成乙個值。最後將所有數相加,輸出後四位就行了。
**就在下面哦,有的童鞋是不是迫不及待呢?
**
var
a:array[0.
.1000001] of longint;
b:array[0.
.1000001] of
char;
i,j,k,n,l:longint;
m,ans:int64;
s:ansistring;
ch:char;
begin
assign(input,'expr.in');reset(input);
assign(output,'expr.out');rewrite(output);
repeat
read(ch);
case ch of
'0'..'9':s:=s+ch;
'+':begin
delete(s,1,length(s)-4);
val(s,m);
inc(n);
s:='';
a[n]:=m;
b[n]:='+';
end;
'*':begin
delete(s,1,length(s)-4);
val(s,m);
inc(n);
s:='';
a[n]:=m;
b[n]:='*';
end;
end;
until eoln;
delete(s,1,length(s)-4);
val(s,m);
inc(n);
a[n]:=m;
b[0]:='+';
b[n]:='+';
while ido
begin
inc(i);
if b[i]='*'
then l:=i;
while (b[i]='*') do
begin
inc(i);
a[l]:=(a[l]*a[i]) mod
10000;
a[i]:=0;
end;
end;
for i:=1
to n do
ans:=(ans+a[i]) mod
10000;
writeln(ans);
close(input);
close(output);
end.
表示式求值
程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...
表示式求值
既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...
表示式求值
寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...