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;

}

你可能感兴趣的:(HDU)