c++程序问题分数求和求以下问题不用数组的办法 急 输入n个分数并对他们求和,用约分之后的最简形式表示.比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需

来源:学生作业帮助网 编辑:作业帮 时间:2024/08/25 22:38:31
c++程序问题分数求和求以下问题不用数组的办法 急 输入n个分数并对他们求和,用约分之后的最简形式表示.比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需
xVN@WQQ'*MoJUB-IRŪ"@6  m(Bt|N {`x鋯}s=s=/:^5J폇u4?+Shy_fEHH-*{84g~S>]c\i]|J}P.5?Hpa^@KE/saRk{OpU;lc3O; R[Σٟ@o7k(ţ֏-U0OF(R-^@j~*a7kP;rDhF.&\!TyUu 1QV xJ$R*yLRnRtk.*>6/c'ҡe"MBB25 8 ,p,鍕c4 ϐ|h  y蕕ЇSd@Vq!Fvr k6E B2e2KyGBK nfGl=C4V缂:p60l(zn,㰘LNĪ%Oxb0iؙHLx"Kfhݫ܉p*>zRӘuI({N;(5>u_w]š`y 2!2MYٻ ݰiBRjg!TpL ч!fİ5<|?g̤0F=scxCХ=k%cY4I

c++程序问题分数求和求以下问题不用数组的办法 急 输入n个分数并对他们求和,用约分之后的最简形式表示.比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需
c++程序问题分数求和
求以下问题不用数组的办法 急
输入n个分数并对他们求和,用约分之后的最简形式表示.
比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需要规约为1/2,3/1需要规约成3,10/3就是最简形式.PS:分子和分母都没有为0的情况,也没有出现负数的情况
关于输入 第一行的输入n,代表一共有几个分数需要求和 接下来的n行是分数
关于输出 输出只有一行,即归约后的结果
例子输入 2
1/2
1/3 例子输出 5/6

c++程序问题分数求和求以下问题不用数组的办法 急 输入n个分数并对他们求和,用约分之后的最简形式表示.比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需
#include<stdio.h>

unsigned gcd ( unsigned m,unsigned n );
void sum( unsigned *sum_x,unsigned *sum_y,  unsigned x, unsigned y);

int main()
{
    int n,i;
    unsigned sum_x, sum_y,x,y;
    scanf("%d",&n);
    scanf("%u/%u",&sum_x, &sum_y);
    for(i=1;i<n;++i) {
        scanf("%u/%u",&x, &y);
        sum(&sum_x, &sum_y, x, y);
    }
    
    if(sum_y != 1) {
        printf("%u/%u\n", sum_x, sum_y);
    } else {
        printf("%u\n", sum_x);
    }
    
    return 0;
}

void sum( unsigned *sum_x,unsigned *sum_y,  unsigned x, unsigned y) {
    unsigned tmp;
    *sum_x = *sum_x * y+ x*(*sum_y);
    *sum_y = *sum_y * y;
    tmp = gcd(*sum_x, *sum_y);
    *sum_x /= tmp;
    *sum_y /= tmp;
}

unsigned gcd ( unsigned m,unsigned n )
{
    unsigned temp;
    if (m<n)
    {
        temp=m;
        m=n;
        n=temp;
    }
    if ( m % n == 0)
    {
        return n;
    }
    else
    {
        return gcd ( n,m % n) ;
    }
}