题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237
题目大意:一个简单的计算器,只要判断好运算顺序即可。先加减后乘除~建议一个比较简单的想法,输入一个数字,再输入一个字符,接下去对字符进行判断,分别将数字存入栈中,最后将栈的数进行整理。这样做下去还可以,不过还是wa了几次!
提供测试数据:0 + 1 估计大多数都是忘记考虑这种情况了~
1 #include <iostream> 2 #include <cstdio> 3 #include <stack> 4 #include <cstring> 5 using namespace std; 6 int main () 7 { 8 stack<double>s; 9 int n; 10 double m; 11 char ch,str; 12 while (scanf("%d%c",&n,&ch)!=EOF) 13 { 14 if (n==0&&ch==' ') 15 break; 16 s.push(n); 17 scanf("%c %d",&ch,&n); 18 switch (ch) 19 { 20 case '+': 21 { 22 s.push((double)n); 23 break; 24 } 25 case '-': 26 { 27 s.push(-(double)n); 28 break; 29 } 30 case '*': 31 { 32 m=s.top(); 33 s.pop(); 34 m=m*(double)n; 35 s.push(m); 36 break; 37 } 38 case '/': 39 { 40 m=s.top(); 41 s.pop(); 42 m=m/(double)n; 43 s.push(m); 44 break; 45 } 46 } 47 while (scanf("%c",&ch)!=EOF) 48 { 49 if (ch==' ') 50 break; 51 scanf("%c%d",&str,&n); 52 switch (str) 53 { 54 case '+': 55 { 56 s.push((double)n); 57 break; 58 } 59 case '-': 60 { 61 s.push(-(double)n); 62 break; 63 } 64 case '*': 65 { 66 m=s.top(); 67 s.pop(); 68 m=m*(double)n; 69 s.push(m); 70 break; 71 } 72 case '/': 73 { 74 m=s.top(); 75 s.pop(); 76 m=m/(double)n; 77 s.push(m); 78 break; 79 } 80 } 81 82 } 83 double sum=0; 84 while (!s.empty()) 85 { 86 //cout<<s.top(); 87 sum+=s.top(); 88 s.pop(); 89 } 90 printf ("%.2lf ",sum); 91 } 92 }