题目1019:简单计算器

来源:互联网 发布:手机u盘数据恢复 编辑:程序博客网 时间:2024/05/16 05:15
题目描述:
    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
    测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出:
    对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
样例输入:
1 + 24 + 2 * 5 - 7 / 110
样例输出:
3.00

13.36

C++代码:

#include<iostream>#include<string>#include<vector>#include<stack>#include<sstream>#include<iomanip>#include<stdio.h>using namespace std;vector<string> s;double getint(string s){    double a;    stringstream ss;    ss<<s;    ss>>a;    return a;}double countr(double a,double b,string op){    if(op=="*")        return a*b;    if(op=="/")        return a/b;    if(op=="+")        return a+b;    if(op=="-")        return a-b;    return a;}double getresult(){    stack<double> r;    stack<string> op;    for(int i=0;i<s.size();i++){        if(s[i]!="*"&&s[i]!="/"&&s[i]!="+"&&s[i]!="-"){            if(!op.empty()&&(op.top()=="*"||op.top()=="/")){                double a=countr(r.top(),getint(s[i]),op.top());                r.pop();                op.pop();                r.push(a);            }else{                if(!op.empty()&&op.top()=="-"){                    op.pop();                    op.push("+");                    r.push(-1*getint(s[i]));                }else{                    r.push(getint(s[i]));                }            }        }        else{            op.push(s[i]);        }    }    while(!op.empty()){        double a=r.top();        r.pop();        double b=r.top();        r.pop();        r.push(countr(b,a,op.top()));        op.pop();    }    double result =  r.top();    return result;}int main(){    string str="";    while(getline(cin,str)&&str!="0"){        string m="";        for(int i=0;i<str.length();i++){            if(str.at(i)!=' '){                m+=str.at(i);            }else{                s.push_back(m);                m="";            }        }        s.push_back(m);        double result = getresult();        printf("%.2lf\n",result);       // cout<<setprecision(2)<<std::fixed<<result<<endl;        s.clear();        str="";    }    return 0;}


原创粉丝点击