zoukankan      html  css  js  c++  java
  • 简单计算器(stack)

    题目描述

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

    输入

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

    输出

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

    样例输入

    30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 * 92
    0

    样例输出

    12178.21

    用栈的思想,将中缀表达式转换成后缀表达式

    转换规则:

    1、如果是空格,i++,跳过;

    2、如果是数字,记录这个完整的数字,放入data栈内;

    3、如果是运算符号,判断优先级别是否高于sig栈顶元素,若是,把当前的符号进栈

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int Rank(char f)
    {
        int aa;
        if(f=='*'||f=='/')
            aa=2;
        if(f=='+'||f=='-')
            aa=1;
        return aa;
    }
    int main()
    {
        stack<char> sig;
        stack<double> data;
        string str;
        ll i,t;
        while(1)
        {
            getline(cin,str);
            if(str=="0")
            {
                break;
            }
            i=t=0;
            while(str[i]||!sig.empty())
            {
                if(str[i]==' ')
                {
                    i++;
                }
                else if(str[i]>='0'&&str[i]<='9')
                {
                    t=t*10+str[i]-'0';
                    i++;
                    if(str[i]<'0'||str[i]>'9')
                    {
                        data.push(t);
                        t=0;
                    }
                }
                else if(sig.empty()||Rank(str[i])>Rank(sig.top()))
                {
                    sig.push(str[i]);
                    i++;
                }
                else
                {
                    double fir,sec;
                    switch(sig.top())
                    {
                    case '+':
                        {
                            fir=data.top();
                            data.pop();
                            sec=data.top();
                            data.pop();
                            data.push(fir+sec);
                        }
                        break;
                    case '-':
                        {
                            fir=data.top();
                            data.pop();
                            sec=data.top();
                            data.pop();
                            data.push(sec-fir);
                        }
                        break;
                    case '*':
                        {
                            fir=data.top();
                            data.pop();
                            sec=data.top();
                            data.pop();
                            data.push(fir*sec);
                        }
                        break;
                    case '/':
                        {
                            fir=data.top();
                            data.pop();
                            sec=data.top();
                            data.pop();
                            data.push(sec/fir);
                        }
                        break;
                    }
                    sig.pop();
                }
            }
            printf("%.2f
    ",data.top());
        }
        return 0;
    }
  • 相关阅读:
    NetSuite Batch Process Status
    NetSuite generated bank files and the Bank Reconciliation process
    Global Search file content in Gitlab repositories, search across repositories, search across all files
    FedEx Package Rate Integration with NetSuite direct integrate by WebServices
    git Merge branches
    git tag and NetSuite deployment tracking
    API 读写cookie的方法
    C# 生成缩略图
    解决jquery操作checkbox全选全不选无法勾选问题
    JS读取写入删除Cookie方法
  • 原文地址:https://www.cnblogs.com/jackwang-sparrow/p/13861147.html
Copyright © 2011-2022 走看看