3054. 波兰表达式

帕秋莉_诺蕾姬

神奇的递归

#include<iostream>
#include<cstring>
#include<cstdlib> 
using namespace std;
int t, c;
double exp()
{
    char s[12];
    cin >> s;
    switch (s[0])
    {
    case '+':return exp() + exp();
    case '-':return exp() - exp();
    case '*':return exp() * exp();
    case '/':return exp() / exp();
    return atof(s);
    }
}
int main()
{
    cin >> t;
    while(t--)
        printf("case #%d:\n%lf\n",c++ ,exp());
}
Saitama
#include <bits/stdc++.h>

using namespace std;

double solve()
{
    char s[10086];
    cin >> s;
    switch(s[0])
    {
    case '+':
        return solve() + solve();
        break;
    case '-':
        return solve() - solve();
        break;
    case '*':
        return solve() * solve();
        break;
    case '/':
        return solve() / solve();
        break;
    default:
        return atof(s);
        break;
    }
}

int main()
{
    int T;
    cin >> T;
    for(int i = 0; i < T; i++)
    {
        printf("case #%d:\n", i);
        printf("%.6lf\n", solve());
    }
    return 0;
}
Li Dao

经典题:前缀表达式求值
方法:堆栈stack,自行百度/Google
遇到数字放进去,遇到符号,抽出最上面两个运算

include

using namespace std;
int T;
string line;
vector src;
stack S;
void solve()
{
getline(cin,line);
stringstream ss(line);
string tmp;
src.clear();
while(!S.empty()) S.pop();
while(ss>>tmp)
{
src.push_back(tmp);
}

for(int i=src.size()-1;i>=0;i–)
{
char first=src[i][0];
if(first==’+’ || first==’-‘ || first==’‘ || first==’/’)
{
double t1,t2;
t1=S.top();S.pop();
t2=S.top();S.pop();
if(first==’+’) S.push(t1+t2);
else if(first==’-‘) S.push(t1-t2);
else if(first==’
’) S.push(t1*t2);
else S.push(t1/t2);
}
else
{
stringstream tt(src[i]);
double now;
tt>>now;
S.push(now);
}
}
printf(“%.6f\n”,S.top());
return;
}
int main()
{
scanf(“%d”,&T);
getline(cin,line);
for(int step=0;step<T;step++)
{
printf(“case #%d:\n”,step);
solve();
}
return 0;
}

Fifnmar

有个一样的题23333

Master X

用eof打出来全是0.000000……
本地姬又没问题。
真诡异……

你当前正在回复 博客/题目
存在问题!