代码如下:
#include<iostream>
#include<cmath>
using namespace std;
class FS {
private:
int fz;
int fm;
public:
FS() {};
FS(int fz, int fm) :fz(fz), fm(fm) {};
int getFz() {
return this->fz;
}
int getFm() {
return this->fm;
}
FS operator+(const FS& x) {
FS temp;
temp.fz = this->fz * x.fm + this->fm * x.fz;
temp.fm = this->fm * x.fm;
int a = abs(temp.fz); int b = abs(temp.fm);
//先保证b是较大的
if(a>b){
int temp = b;
b = a;
a = temp;
}
//辗转相除求最大公约数
while(b%a!=0){
int temp = b % a;
b = a;
a = temp;
}
//约分
temp.fz/=a;
temp.fm/=a;
return temp;
}
};
int main() {
int n, fz1, fm1, fz2, fm2;
char a, b;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> fz1 >> a >> fm1 >> b;
cin >> fz2 >> a >> fm2 >> b;
FS fs1(fz1, fm1);
FS fs2(fz2, fm2);
FS fs3; fs3 = fs1 + fs2;
if (fs3.getFz() == 0) {
cout << "0z1m" << endl;
}
//把分母的负号给分子
else if (fs3.getFm() < 0) {
cout << -fs3.getFz() << "z" << -fs3.getFm() << "m" << endl;
}
else if(fs3.getFm()!=0){
cout << fs3.getFz() << "z" << fs3.getFm() << "m" << endl;
}
}
}
这里我保证了b%a!=0,也即a不会为0,为什么会出现浮点错误?
注:请不要给我一份AC代码的链接,否则不予采纳