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

 

你可能感兴趣的:(HDU)