求值 模擬
阿新 • • 發佈:2017-10-20
har for scrip cstring int mes desc inf 出了
答案不會超過 64 位有符號整數範圍。
[Description]
小 77 是 2017 級信奧班的成員,因為哲學而出名。
小 77 的數學老師信奉大力刷題出奇跡,於是給他們出了 INF 道簡單的數字運算題。每道題
都只包含加號,乘號和十以內的數字。雖然題很簡單,但是小 77 覺得這麽多題簡直是浪費
時間,而他還要忙著鉆研哲學,於是決定讓你寫一個程序自動運算。
[Input]
一行,一個只包含加號,乘號和十以內的數字(即數字範圍為[0, 9])的算式。
[Output]
一行一個整數,對算式求值的結果。
[Sample]
[Tips]
數字,符號中間可能有一個或多個空格,也有可能沒有空格。
算式去除空格後的長度不超過 100, 000。平均情況下每兩個符號間有兩個空格。
答案不會超過 64 位有符號整數範圍。
記錄兩個符號和兩個數字,每次是乘號就乘上。
我的棧是沒必要用的,但是懶得改了。
代碼:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define ll long long #define il inline #define db double using namespace std; int fu[1000045],top; ll num[1000045],topp; int main() { freopen("eval.in","r",stdin); freopen("eval.out","w",stdout); char ch=getchar(); ll ans=0; while(ch!=EOF) { if(ch==‘+‘) fu[++top]=1; if(ch==‘*‘) fu[++top]=2; if(ch>=‘0‘&&ch<=‘9‘) { num[++topp]=ch-‘0‘; if(fu[top]==2) { ll s=num[topp]*num[topp-1]; num[--topp]=s; top--; } } ch=getchar(); } for(int i=1;i<=topp;i++) ans+=num[i]; printf("%lld\n",ans); return 0; }
求值 模擬