题目1019:简单计算器-------注意此题的输入中空格和字符和数字的关系;stack的c头文件;

AC:#include<stdio.h>

#include<stack>
using namespace std; 
int main()
{      int a;
        char b,c;
        double d; 
    while(scanf("%d%c",&a,&c))
    {
       if (a==0 && c=='
') break; //注意这里,输入0结束时,有一个换行符;因为要一个                                     //一个字符的判断,所以不得不注意

stack
<double> num; num.push(a); while(scanf("%c %d%c",&b,&a,&c)!=EOF)//输入方式 { if (b=='+') num.push(a); else if (b=='-') num.push(-1.0*a); else if (b=='*') { d=num.top()*a; num.pop(); num.push(d); } else if (b=='/') { d=num.top()/a; num.pop(); num.push(d); } if (c!=' ') break; } while(!num.empty()) { if (num.size()==1) { printf("%.2lf ",num.top()); num.pop();break; } double d1=num.top(); num.pop(); double d2=num.top(); num.pop(); num.push(d1+d2); } } return 0; }

 后来又写了一次AC:

#include<stdio.h>
#include<stack>
using namespace std; 
int main()
{
    int n1;char n2;    
    while(scanf("%d%c",&n1,&n2)!=EOF)
    {
       if(n1==0 && n2=='
') return 0;
        stack<double> s; 
        s.push(n1);  
        char c1,c2,c3;
        int a;
        double b;
        while(scanf("%c %d%c",&c1,&a,&c2)!=EOF)
        {
          if(c1=='+') s.push(a);
          else if(c1=='-') s.push(-1.0*a);
          else if(c1=='*') 
          {
               b=s.top();
            s.pop(); 
            s.push(a*b);
          }    
          else if(c1=='/')
           {
                b=s.top();
                s.pop(); 
                s.push(b/a);
           }
           if(c2!=' ') break;
        }
    //这样一来,stack里面的都是加数
       double res=0;
       while(!s.empty())
       {
           if(s.size()==1) 
           {
               res=s.top();
               printf("%.2lf
",res);
               s.pop();
               break;
           }
            double d=s.top();
            s.pop();
            double e=s.top();
            s.pop(); 
            s.push(d+e);
       } 
    }
    return 0;
}
原文地址:https://www.cnblogs.com/jianrenguo/p/6497853.html