有点繁琐的一道题目,首先要定义一个表示分数的类,这个类中包含分数的基本运算,这样便于后面代码的编写。然后就是借助于栈来逐步读入对应的方程,定义一个树的结构来存储方程的中序次序。同时注意,在读入的同时,对于‘X’字符、常数以及运算符要进行不同的存储。建立树结束之后,就开始进行逐步化简即可,具体实现见如下代码:
#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<sstream>
#include<cstdio>
#include<deque>
#include<functional>
using namespace std;
typedef long long LL;
LL gcd(LL p,LL q){
return q ? gcd(q, p%q) : p;
}
class Fraction{//p/q
public:
LL p, q;
Fraction(LL x = 0, LL y = 1){
p = x, q = y;
}
void normal(){//约分操作
LL common = gcd(p, q);
p = p / common;
q = q / common;
}
Fraction op