递归计算中缀表达式
计算一个四则运算的中缀表达式
如:
Input: 6+12*(15*5+2-4)+5/(1+2)
Output: 883.667
#include <iostream>
using namespace std;
float value(int priorty = 2)
{
float result = (priorty == 0) ? 0 : value(priorty - 1);
if (cin.peek == '(')
{
cin.get;
result = value();
cin.get;
}
else if (priorty == 0)
while (cin.peek >= '0' && cin.peek <= '9')
result = result * 10 + cin.get - '0';
else if (priorty == 1)
while (cin.peek == '*' || cin.peek == '/')
result = (cin.get == '*') ? result * value(priorty - 1) : result / value(priorty - 1);
else if (priorty == 2)
while (cin.peek == '+' || cin.peek == '-')
result = (cin.get == '+') ? result + value(priorty - 1) : result - value(priorty - 1);
return result;
}
鬼畜版重构:
#include <iostream>
#define a static_cast<char>(std::cin.peek())
#define b static_cast<char>(std::cin.get())
int c(int d = 2){
int e = (!d) ? 0 : c(d >> 1);
if (!(a ^ 40) && (!d) && b) e = c() ^ b ^ 41;
while ((!d) && a >= 48 & a <= 57) e = e * 10 + b - 48;
while ((d & 1) && !(1974 % a)) e = (b ^ 47) ? e * c(d >> 1) : e / c(d >> 1);
while ((d & 2) && !(1935 % a)) e = (b ^ 45) ? e + c(d >> 1) : e - c(d >> 1);
return e;
}
测试代码
int main(){
cout<<value()<<endl;
}
终极鬼畜main函数版
# include <iostream>
# define a static_cast<char>(std::cin.peek())
# define b static_cast<char>(std::cin.get())
int main(int c = 1,char** useless = nullptr)
{
int d = (c >> 2) ? 0 : main(-~c);
if (!(a ^ 40) && (c >> 2) && b) d = main() ^ b ^ 41;
while ((c >> 2) && a >= 48 & a <= 57) d = d * 10 + b - 48;
while ((c & 3) && !(1974 % a)) d = (b ^ 47) ? d * main(-~c) : d / main(-~c);
while (!(c ^ 2) && !(1935 % a)) d = (b ^ 45) ? d + main(-~c) : d - main(-~c);
if (!(c >> 1) && a ^ 41) std::cout << d << std::endl;
return (!(c >> 1) && a ^ 41) ? 0 : d;
}