神奇的递归
#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()); }
#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; }
经典题:前缀表达式求值 方法:堆栈stack,自行百度/Google 遇到数字放进去,遇到符号,抽出最上面两个运算
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; }
有个一样的题23333
用eof打出来全是0.000000…… 本地姬又没问题。 真诡异……
神奇的递归
经典题:前缀表达式求值
方法:堆栈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;
}
有个一样的题23333
用eof打出来全是0.000000……
本地姬又没问题。
真诡异……