zoukankan      html  css  js  c++  java
  • 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!=''){
                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
    ",opnd.top());
        }
        return 0;
    }
    
  • 相关阅读:
    关于oracle的导入数据流程,以及错误解决
    解决 lombok 和 freemarker 下载慢问题 以及安装方法
    解决maven项目没有Maven Dependencies
    将maven仓库改为阿里仓库
    Dos攻击和校网渗透
    KaliLinux切换python版本
    Kali国内更新源
    linux安装jdk(.rpm)
    Centos 关于 mysql 命令
    Linux删除命令
  • 原文地址:https://www.cnblogs.com/forever97/p/3668801.html
Copyright © 2011-2022 走看看