HDOJ 1237 簡單計算器(堆疊)
阿新 • • 發佈:2019-02-16
簡單計算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 14833 Accepted Submission(s): 5050
Input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用一個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。
Output 對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位。
Sample Input 1 + 2 4 + 2 * 5 - 7 / 11 0
Sample Output 3.00 13.36
只用堆疊即可,c程式碼如下:
#include<cstdio> #include<cstring> double a[210]; int main() { int i,sign,count,j; double sum; char c; while(1) { sign=1;i=0; memset(a,0,sizeof(a)); scanf("%lf",&a[0]); while(getchar()!='\n') { sign=0; scanf("%c %d",&c,&count); if(c=='+') a[++i]=count; else if(c=='-') a[++i]=-count; else if(c=='*') a[i]=a[i]*count; else if(c=='/') a[i]=a[i]/(count*(1.0)); } if(sign) break; sum=0; for(j=0;j<=i;j++) sum+=a[j]; printf("%0.2lf\n",sum); } return 0; }
c++ STL——stack解法:
#include<cstdio> #include<stack> using namespace std; int main() { int i,sign,j; double sum,num; char c; while(1) { sign=1; stack<double>count; scanf("%lf",&num); count.push(num); while(getchar()!='\n') { sign=0; scanf("%c %lf",&c,&num); if(c=='+') count.push(num); else if(c=='-') count.push(-num); else if(c=='*') { double x=count.top(); x=x*num; count.pop(); count.push(x); } else { double x=count.top(); x=x/num; count.pop(); count.push(x); } } if(sign) break; sum=0; while(!count.empty()) { sum+=count.top(); count.pop(); } printf("%.2lf\n",sum); } return 0; }