HDU-1237-题解-STL、栈

HDU 1237 题解

简单计算器

题目大意

计算器,非负整数 加减乘除

Time: 1000 ms
Memory: 32768 kB

解题思路及分析

由于乘除的优先级比加法高,所以在计算的时候要先算乘除
没有括号,乘除算的只是与相邻数字运算的结果
用栈来维护,只算加法,减法则把相反数入栈
乘除即取出栈顶,计算过后再入栈
输入有些复杂,注意结束输入的条件否则容易WA

AC代码

#include <bits/stdc++.h>
using namespace std;

int main()
{
    double first;
    while (~scanf("%lf", &first))
    {
        stack<double> plus;
        plus.push(first);
        char op;
        double num = -1;
        while (~scanf("%c", &op))
        {
            if (op == ' ')
            {
                continue;
            }
            if (op == '\n')
            {
                if (first == 0 && num == -1)
                {
                    return 0;
                }
                break;
            }
            scanf("%lf", &num);
            if (op == '+')
            {
                plus.push(num);
            }
            if (op == '-')
            {
                plus.push(-num);
            }
            if (op == '*')
            {
                double tmp = plus.top();
                plus.pop();
                plus.push(num * tmp);
            }
            if (op == '/')
            {
                double tmp = plus.top();
                plus.pop();
                plus.push(tmp / num);
            }
        }
        double ans = 0;
        while (!plus.empty())
        {
            ans += plus.top();
            plus.pop();
        }
        printf("%.2f\n", ans);
    }
    return 0;
}
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页