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;  
    } 
    

      

  • 相关阅读:
    富文本编辑器 ueditor
    防抖和节流 lodash插件
    lodash
    awesome
    怎么在移动端模拟pc端进行web开发调试日志
    添加水印
    node.js取参四种方法req.body,req.params,req.param,req.body
    插件包
    python——Scrapy框架简介、内置选择器、管道文件、爬虫模块中的spider类
    python——BeautifulSoup4解析器,JSON与JsonPATH,多线程爬虫,动态HTML处理
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7057976.html
Copyright © 2011-2022 走看看