c++活泼虾 2024-02-03 19:14 采纳率: 66.7%
浏览 12

一本通1209:分数求和

1209:分数求和

【题目描述】

输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。

如:56、103均是最简形式,而36需要化简为12,31需要化简为3。

分子和分母均不为0,也不为负数。

【输入】

第一行是一个整数n,表示分数个数,1≤n≤10;

接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。

【输出】

输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。

【输入样例】

2
1/2
1/3

【输出样例】

5/6

代码

#include<bits/stdc++.h>
using namespace std;
int gbs(int m,int n){
    int r;
    r=m%n;
    while(r!=0)
    {
        m=n;
        n=r;
        r=m%n;
    }
    return n;
}
int main() {
    char b1,b2;
    int n,a1,c1,a2,c2,k;
    cin>>n;
    cin>>a1>>b1>>c1;
    for(int i=1;i<n;i++){
        cin>>a2>>b2>>c2;
        k=gbs(c1,c2)*c1*c2;
        a1=k/c1*a1;
        a2=k/c2*a2;
        a1=a1+a2;
        c1=c2=k;
    }
    k=gbs(a1,c1);
    a1=a1/k;
    c1=c1/k;
    if(c1==1)
    cout<<a1;
    else
    cout<<a1<<b1<<c1;
    return 0;
}

问题

测试点4,7,10答案错误
请各位程序员帮帮我

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-03 19:17
    关注

    引自免费微信小程序:皆我百晓生

    针对您的问题,测试点4、7、10答案错误的原因在于代码中处理分数加法以及化简的部分存在逻辑和实现上的错误。首先,您在读取分数时没有正确地将输入的字符转换为整数,并且在进行分数相加时直接对分子进行了累加,而不是先通分再相加。以下是修复后的代码:

    #include <iostream>
    using namespace std;
    
    int gcd(int a, int b) {
        if (b == 0)
            return a;
        else
            return gcd(b, a % b);
    }
    
    void simplify(int& numerator, int& denominator) {
        int g = gcd(numerator, denominator);
        if (g > 1) {
            numerator /= g;
            denominator /= g;
        }
    }
    
    int main() {
        int n;
        cin >> n;
    
        int total_numerator = 0, total_denominator = 1;
    
        for (int i = 0; i < n; ++i) {
            char slash;
            int p, q;
            cin >> p >> slash >> q; // 正确读取分子和分母
    
            // 通分
            total_numerator = total_numerator * q + total_denominator * p;
            total_denominator *= q;
    
            // 化简当前结果
            simplify(total_numerator, total_denominator);
        }
    
        simplify(total_numerator, total_denominator);
    
        // 输出最终结果
        if (total_denominator == 1) {
            cout << total_numerator;
        } else {
            cout << total_numerator << '/' << total_denominator;
        }
    
        return 0;
    }
    

    这个修改过的代码会正确读取分数,然后每次迭代都将分数累加到总和中,并确保每次累加后都进行化简。最后根据最简形式的要求输出结果。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月3日

悬赏问题

  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题