问题标题: 酷町堂:急!!!3795 分数乘法纠错,请赐教,谢谢!

0
0
已解决
汪一言
汪一言
高级守护
高级守护

3795   分数乘法

经验值:800 时间限制:1000毫秒

题目描述 Description

酷町猫最近在学习分数,它想用自己学到的计算机知识,来计算分数乘法的结果。
输入两个分数a,b,求出它们相乘的结果。
例如:
(2/4) * (2/4) ,它们的结果为:(2 * 2) / (4 * 4) = 4/16 = 1/4。

(4/2) * (4/2) ,它们的结果为:(4 * 4) / (2 * 2) = 16/4 = 4。

输入描述 Input Description

输入4个空格隔开的整数a1,a2,b1,b2。分别表示分数a的分子,分母,分数b的分子,分母。

输出描述 Output Description

输出分数a*b的结果(需要约分)。

#include<iostream>

#include<cstdio>

#include<cmath>

#include<iomanip>

using namespace std;

int main(){

    long long a,b,c,d,t1,t2,r;

    cin>>a>>b>>c>>d;

    t1=a*c;t2=b*d;

    r=t1;

    while(r!=0){

        r=t1%t2;

        t1=t2;

        t2=r;

    }

    cout<<(a*c)/t2<<'/'<<(b*d)/t2;

    return 0;

}


0
已采纳
李奕歌
李奕歌
初级天翼
初级天翼

WA40,你的太复杂,参考一下

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b){
    return a*b/gcd(a,b);
}
int main(){
    int a,b,c,d,t,T,s;
    cin>>a>>b>>c>>d;
    s=lcm(b,d);
    a*=s;b*=s;c*=s;d*=s;
    t=a*c;
    T=b*d;
    if(t%T==0)
        cout<<t/T;
    else
        cout<<t/gcd(t,T)<<"/"<<T/gcd(t,T);
    return 0;
}

我要回答