lyh20021209 2022-05-05 10:00 采纳率: 76.9%
浏览 31
已结题

C++ 分数加法重载 浮点错误

img


代码如下:


#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,为什么会出现浮点错误?

img


注:请不要给我一份AC代码的链接,否则不予采纳

  • 写回答

1条回答 默认 最新

  • SmallAntJ 2022-05-05 23:25
    关注

    问题就是a等于0了,你可以测试一下0z1m+0z1m,还有1z5m+1z-5m。这两种情况都是分子a等于0,分母b大于0。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢