HDU 1237 简单计算器

高一时打过,做了整整一个晚上,现在看到计算器的题目就头疼,从网上找了一个,修修改改了一下……

#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
char Precede(char a,char b){
    if(a=='+'||a=='-'){
        switch(b){
            case '+':
            case '-':return '>';break;
            case '*':
            case '/':return '<';break;
        }
    }
    if(a=='*'||a=='/')
    return '>';
}
double operate(double a,char c,double b){
    switch(c){
        case '+':return (a+b);break;
        case '-':return (a-b);break;
        case '*':return a*b;break;
        case '/':return a/b;break;
    }
}
int main(){
    stack opnd;
    stack optr;
    string s;
    char theta,c;
    int i,k;
    double a,b;
    while(getline(cin,s),s!="0"){
        opnd.push(s[0]-48);
        i=0;
        c=s[++i];
        while(c!='\0'){
            if(c==' '){c=s[++i];continue;}
            if(c>='0'&&c<='9'){
                if(s[i-1]>='0'&&s[i-1]<='9'){
                    a=opnd.top()*10+c-48;
                    opnd.pop();
                    opnd.push(a);
                }
                else opnd.push(c-48);
                c=s[++i];
            }
            else{
                if(optr.empty()!=true){
                    switch(Precede(optr.top(),c)){
                        case '<':optr.push(c);c=s[++i];break;
                        case '>':theta=optr.top();
                                 optr.pop(); a=opnd.top();
                                 opnd.pop(); b=opnd.top();
                                 opnd.pop();
                                 opnd.push(operate(b,theta,a));
                                 break;
                     }
                 }
                else optr.push(c),c=s[++i];
            }
        }
        while(optr.empty()!=true){
             theta=optr.top();
             optr.pop();
             a=opnd.top();
             opnd.pop();
             b=opnd.top();
             opnd.pop();
             opnd.push(operate(b,theta,a));
        }
        printf("%.2lf\n",opnd.top());
    }
    return 0;
}
posted @ 2014-04-16 15:46  forever97  阅读(180)  评论(0编辑  收藏  举报