zoukankan      html  css  js  c++  java
  • 1019.简单计算器

    题目描述:
        读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
    输入:
        测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
    输出:
        对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
    样例输入:
    1 + 2
    4 + 2 * 5 - 7 / 11
    0
    样例输出:
    3.00
    13.36

     Solution1:

    #include<stdio.h> 
    #define Max 200
    int main(){
        double stack[Max];
        int top,i,n;
        double d,num,count; 
        char symbol,space;
        while(scanf("%d ",&n)!=EOF&&n){
            top=0;
            stack[++top]=1.0*n;
            while(scanf("%c%lf%c",&symbol,&num,&space)!=EOF){
                if(symbol =='+'){
                    stack[++top]=num;
                }else if(symbol=='-'){
                    stack[++top]=-1*num;
                }else if(symbol=='*'){
                    stack[top]=stack[top]*num;
                }else if(symbol=='/'){
                    stack[top]=stack[top]/num;
                }
                if(space!=' '){
                        break;
                }
            } 
            count=0;
            for(i=1;i<=top;i++)
                count+=stack[i];
            printf("%.2lf
    ",count);
              
        }
        return 0;
    }

    Solution2:

    #include<stack>
    #include<stdio.h>
    using namespace std;
    
    char str[220];
    int mat[][5]={
            1,0,0,0,0,
            1,0,0,0,0,
            1,0,0,0,0,
            1,1,1,0,0,
            1,1,1,0,0
    };
    stack<int> op;
    stack<double> in;
    void getop(bool &reto,int &retn,int &i){
        if(i==0 && op.empty()==true){
            reto=true;
            retn=0;
            return;
        }
        if(str[i]==0){
            reto=true;
            retn=0;
            return;
        }
        if(str[i]>='0' && str[i]<='9'){
            reto=false;
        }
        else{
            reto=true;
            if(str[i]=='+'){
                retn=1;
            }
            else if(str[i]=='-'){
                retn=2;
            }
            else if(str[i]=='*'){
                retn=3;
            }
            else if(str[i]=='/'){
                retn=4;
            }
            i+=2;
            return;
        }
        retn=0;
        for(;str[i]!=' ' && str[i]!=0;i++){
            retn*=10;
            retn+=str[i]-'0';
        }
        if(str[i]==' ') i++;
        return;
    }
    
    int main(){
        while(gets(str)){
            if(str[0]=='0' && str[1]=='0') break;
            bool retop;
            int retnum;
            int idx=0;
            while(!op.empty()) op.pop();
            while(!in.empty()) in.pop();
            while(true){
                getop(retop,retnum,idx);
                if(retop==false){
                    in.push((double)retnum);
                }
                else{
                    double temp;
                    if(op.empty()==true || mat[retnum][op.top()]==1){
                        op.push(retnum);
                    }
                    else{
                        while(mat[retnum][op.top()]==0){
                            int ret=op.top();
                            op.pop();
                            double b=in.top();
                            in.pop();
                            double a=in.top();
                            in.pop();
                            if(ret==1) temp=a+b;
                            else if(ret==2) temp=a-b;
                            else if(ret==3) temp=a*b;
                            else temp=a/b;
                            in.push(temp);
                        }
                        op.push(retnum);
                    }
                }
                if(op.size()==2 && op.top()==0) break;
            }
            printf("%.2f
    ",in.top());
        }
        return 0;
    }
  • 相关阅读:
    谈谈泛型和锁,一个值得注意的问题!
    关于++运算符重载的一个问题,有点“饶”!
    关于抽象类的构造函数!
    在嵌套类中是否可以触发外部类中定义的事件!
    谈谈C#的私有成员的一个有趣的现象!
    关于循环引用!
    谈谈常数字段!
    C#中对byte类型的处理。
    C#l编译器是否会为值类型生成默认的构造函数!
    谈谈DivideByZeroException异常!并非像表面那么简单!
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9736637.html
Copyright © 2011-2022 走看看