zoukankan      html  css  js  c++  java
  • Hdu 1237简单计算器

    简单计算器

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 21184    Accepted Submission(s): 7599

    Problem Description

    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

    Input

    测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

    Output

    对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

    Sample Input

    1 + 2

    4 + 2 * 5 - 7 / 11

    0

    Sample Output

    3.00

    13.36

    #include <stack>  
    #include <stdio.h>  
    #include <string.h>  
    using namespace std;  
    bool check(char,char);  
    void solve();  
    char str[205],ch;  
    double tmp,a,b;  
    int i,len;  
    stack<double> v;  
    stack<char> c;  
    int main()  
        {  
            while(gets(str)!=NULL)  
            {  
                if(!strcmp(str,"0"))  
                {  
                    break;  
                }  
                solve();  
            }  
            return 0;  
        }  
    void solve()  
        {  
            len=strlen(str);  
            for(i=0;i<len;i++)  
            {  
                if(str[i]==' ')  
                {  
                    continue;  
                }  
                if(str[i]>='0' && str[i]<='9')  
                {  
                    tmp=0;  
                    while(str[i]>='0' && str[i]<='9')  
                    {  
                        tmp*=10;  
                        tmp+=str[i]-'0';  
                        i++;  
                    }  
                    v.push(tmp);  
                }  
                if(str[i]=='+' || str[i]=='-' || str[i]=='*' || str[i]=='/')  
                {  
                    if(c.empty())  
                    {  
                        c.push(str[i]);  
                    }else{  
                        ch=c.top();  
                        while(check(ch,str[i]))  
                        {  
                            a=v.top();  
                            v.pop();  
                            b=v.top();  
                            v.pop();  
          
                            c.pop();  
          
                            switch(ch)  
                            {  
                                case '+':  
                                    v.push(a+b);  
                                    break;  
                                case '-':  
                                    v.push(b-a);  
                                    break;  
                                case '*':  
                                    v.push(a*b);  
                                    break;  
                                case '/':  
                                    v.push(b/a);  
                                    break;  
                            }  
          
                            if(c.empty())  
                            {  
                                break;  
                            }else{  
                                ch=c.top();  
                            }  
                        }  
                        c.push(str[i]);  
                    }  
                }  
            }  
            while(!c.empty())  
            {  
                a=v.top();  
                v.pop();  
                b=v.top();  
                v.pop();  
          
                ch=c.top();  
                c.pop();  
          
                switch(ch)  
                {  
                    case '+':  
                        v.push(a+b);  
                        break;  
                    case '-':  
                        v.push(b-a);  
                        break;  
                    case '*':  
                        v.push(a*b);  
                        break;  
                    case '/':  
                        v.push(b/a);  
                        break;  
                }  
            }  
          
            printf("%.2f
    ",v.top());  
            v.pop();  
        }  
    bool check(char ch1,char ch2)  
        {  
            if(ch1=='*'||ch1=='/')  
            {  
                return true;  
            }  
            if(ch2=='+'||ch2=='-')  
            {  
                return true;  
            }  
            return false;  
    } 
    

      

  • 相关阅读:
    SSL JudgeOnline 1194——最佳乘车
    SSL JudgeOnline 1457——翻币问题
    SSL JudgeOnlie 2324——细胞问题
    SSL JudgeOnline 1456——骑士旅行
    SSL JudgeOnline 1455——电子老鼠闯迷宫
    SSL JudgeOnline 2253——新型计算器
    SSL JudgeOnline 1198——求逆序对数
    SSL JudgeOnline 1099——USACO 1.4 母亲的牛奶
    SSL JudgeOnline 1668——小车载人问题
    SSL JudgeOnline 1089——USACO 1.2 方块转换
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7057976.html
Copyright © 2011-2022 走看看