You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Fraction类实现分数加乘运算无输出问题排查

问题原因

代码运行无输出是核心错误直接导致程序崩溃,外加逻辑失效共同造成的:

  • 致命运行时错误:simplify()方法的循环变量i初始值为0,循环内执行num%i、den%i时触发除零异常,程序会直接终止,不会产生任何输出,这是无输出的根本原因。
  • 逻辑错误:simplify()方法中虽然计算了最大公约数gcd,但计算完成后没有将分子、分母同除以gcd,约分逻辑完全不生效。
  • 潜在隐患:原有逻辑没有处理分子为0、分数带负号的场景,遍历公约数时未对负数取绝对值,会出现计算结果不符合预期的问题。
修改后可运行代码
#include <iostream>
#include <algorithm>
#include <cstdlib>

using namespace std;

class Fraction {
private:
    int num;
    int den;

public:
    Fraction(int a, int b) {
        num = a;
        den = b;
    }

    void simplify() {
        // 分子为0时统一规约为0/1
        if (num == 0) {
            den = 1;
            return;
        }
        int gcd = 1;
        int abs_num = abs(num);
        int abs_den = abs(den);
        int min_val = min(abs_num, abs_den);
        // 循环从1开始,避免除零错误
        for (int i = 1; i <= min_val; i++) {
            if (abs_num % i == 0 && abs_den % i == 0) {
                gcd = i;
            }
        }
        // 执行约分操作
        num /= gcd;
        den /= gcd;
        // 统一将负号放在分子位置,保证分母恒为正
        if (den < 0) {
            num = -num;
            den = -den;
        }
    }

    void print() {
        cout << num << "/" << den << endl;
    }

    void add(Fraction const& f2) {
        int lcm = den * f2.den;
        int x = lcm / den;
        int y = lcm / f2.den;
        int n = x * num + y * f2.num;
        num = n;
        den = lcm;
        simplify();
    }

    void multiply(Fraction const& f2) {
        num = num * f2.num;
        den = den * f2.den;
        simplify();
    }
};

int main() {
    Fraction f1(2, 3);
    Fraction f2(3, 5);

    f1.add(f2);
    cout << "加法运算后f1结果:";
    f1.print();
    cout << "加法运算后f2结果:";
    f2.print();

    f1.multiply(f2);
    cout << "乘法运算后f1结果:";
    f1.print();
    cout << "乘法运算后f2结果:";
    f2.print();
    return 0;
}
运行预期输出
加法运算后f1结果:19/15
加法运算后f2结果:3/5
乘法运算后f1结果:19/25
乘法运算后f2结果:3/5

内容的提问来源于stack exchange,提问作者Ananya Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:03:18