zoukankan      html  css  js  c++  java
  • HDU1237--简单计算器(栈的应用)

    Problem Description

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

    Input

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

    Output

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

    Sample Input

    1 + 2
    4 + 2 * 5 - 7 / 11
    0

    Sample Output

    3.00
    13.36

    Source

    浙大计算机研究生复试上机考试-2006年

    Recommend

    JGShining

    思路:

    因为乘除的优先级要高于加减的优先级,所以要先进行乘除的计算,每一个乘除计算的两个元素是前一个与后一个,其中,前一个数可能原始数据,也可能

    是进行了乘除运算之后的结果(第一遍遍历我们只处理乘除)

    可以用栈来模拟,没进行一次乘除运算就将结果取代栈顶元素

    第二遍遍历的时候,处理加减运算

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=210;
    int num[MAXN];
    char f[MAXN];
    double s[MAXN];
    char sg[MAXN];
    int main()
    {
        string str;
        while(getline(cin,str)&&str!="0"){
            stringstream stm(str);
            int i=1,j=0;
            int sum_num=0;
            stm>>num[0];
            while(stm>>f[j]>>num[i]){
                j++;
                i++;
                sum_num++;
            }
            int cou=0,cou2=0;
            double tmp=0;
            s[cou++]=num[0];
            for(i=1,j=0;j<sum_num;i++,j++){
                switch(f[j]){
                    case '+':s[cou++]=num[i];sg[cou2++]=f[j];break;
                    case '-':s[cou++]=num[i];sg[cou2++]=f[j];break;
                    case '*':tmp=s[--cou]*num[i];s[cou++]=tmp;break;
                    case '/':tmp=s[--cou]/(num[i]*1.0);s[cou++]=tmp;break;
                }
            }
            double res=s[0];
            for(i=1,j=0;j<cou2;j++,i++){
                switch(sg[j]){
                    case '+':res+=s[i];break;
                    case '-':res-=s[i];break;
                }
            }
            printf("%.2lf
    ",res);
            //cout<<res<<endl;
        }
    }
  • 相关阅读:
    SEO优化范列20120215
    IIS中的上传目录权限设置问题
    c# webservice接口 输出xml
    360浏览器用window.open的话,session会丢失
    iis网站安全设置
    SEO优化20120215
    IIS6.0安全设置方法 .
    优化20120215
    WIN2003的安全设置
    webservice 生成dll的方法
  • 原文地址:https://www.cnblogs.com/liuzhanshan/p/6294501.html
Copyright © 2011-2022 走看看