首页 > 代码库 > hdu 1237 简单计算器

hdu 1237 简单计算器

题目链接: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==\n)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==\n)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\n",sum);91     }92 }
View Code