自学内容网 自学内容网

c++题目_T331046 分数加法

# 分数加法

## 题目描述

给定两个有理数$\frac{a}{b}$和$\frac{c}{d}$,求$\frac{e}{f}=\frac{a}{b}+\frac{c}{d}$。

## 输入格式

第一行四个整数$a,b,c,d$。

## 输出格式

一行两个整数$e,f$代表答案,要求化为最简分数。

## 样例 #1

### 样例输入 #1

```
1 1 2 2
```

### 样例输出 #1

```
2 1
```

## 提示

对于$40\%$的数据,$a,b,c,d\leq10$。

对于$80\%$的数据,$a,b,c,d\leq10^5$。

对于$100\%$的数据,$0\leq a,c\leq 10^8,1\leq b,d\leq 10^8$。

这是一水题

直接做

#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c,d;
cin>>a>>b>>c>>d;
a*=d;
c*=b;
int j=d;
d*=b;
b*=j;
int e,f;
e=a+c;
f=b;
int mx;
for(int i=2;i<=min(e,f);i++){
if(e%i==0&&f%i==0) {
mx=i;
}
}
cout<<e/mx<<" "<<f/mx;
return 0;
}
//   a           c
//------   +   ------ 
//   b           d

emmm...

优化一下

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long a,b,c,d;
    cin>>a>>b>>c>>d;
    long long e,f;
    e=a*d+c*b;
    f=b*d;
    long long mx = __gcd(e,f); // 使用 __gcd 函数求最大公约数
    e /= mx;
    f /= mx;
    cout<<e<<" "<<f;
    return 0;
}
//   a           c
//------   +   ------ 
//   b           d


原文地址:https://blog.csdn.net/wjl_8616/article/details/143694071

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!