描述 description
給定乙個只包含加法和乘法的算術表示式,請你程式設計計算表示式的值。
輸入格式 input format
輸入僅有一行,為需要你計算的表示式,表示式中只包含數字、加法運算子「+」和乘法運算子「*」,且沒有括號,所有參與運算的數字均為0到2^31-1之間的整數。輸入資料保證這一行只有0~9、+、*這12種字元
。輸出格式 output format
輸出只有一行,包含乙個整數,表示這個表示式的值。注意:當答案長度多於4位時,請只輸出最後4位,前導0不輸出。
樣例輸入 sample input
1+1*3+4
樣例輸出 sampleoutput
8時間限制 time limitation
1s注釋 hint
【樣例輸入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。
這道題一看資料用普通的模擬肯定會超時,有因為只有+和*這兩種操作,所以直接用棧就可以
如果當前符號是+號,那麼就把這個數存入棧中,如果當前符號是*號,則將當前的數和棧頂相乘在放入棧中
最後直接掃瞄一遍讓棧中的所有元素相加即可
**如下:
#include#includeboom(ac**)#include
#include
#include
using
namespace
std;
struct haha//
用結構體記錄符號和數字的值
a[101000
];int num[101000],top=0
;inline
void push(int
a)inline
void
pop()
inline
inttop()
bool
empty()
intmain()
else
}for(int i=1;i<=l;i++)
}int ans=0
;
while(!empty())
cout
<10000
<
return0;
}
noip2013題解 普及組
這次整體題目個人認為不是非常難,但是想取得高分並不容易。接下來是我的個人分析 包含ak 1.計數問題 首先,第一眼看到這個題目我就驚呆了。因為做過。看了看資料範圍,比較小,每個數字最多6位,1000000個,6000000次秒過是沒有太大的問題的。只要將每乙個數字分離即可。include inclu...
NOIP2013普及組 車站分級
題目 洛谷p1983 vijos p1851 codevs3294。題目大意 有一些車停靠某些站。現在要給所有站分級,規定一輛車停靠的所有站的最小級數必須大於 起點 終點 所有不停靠的站的最大級數。問至少分成幾種不同的級數?解題思路 由於停靠的站級數大於不停靠的站,我們把每列車停靠的站向不停靠的連一...
NOIp2013普及組 車站分級
思路 對於每一趟車,將區間內所有經停的站和所有未經停的站連一條邊,表示前者優先順序一定高於後者,然後用kahn跑一遍拓撲排序即可。然而這樣會創造大量多餘的邊,會tle1個點。考慮一種優化 因為每趟車本身也有乙個優先順序,因此可以將這趟車也看作乙個點,每次先所有將經停的站連一條邊到這兩車上,表示這些站...