CF305B

题目意思很简单,就是求两个分数是否相同。

思路很明确就是将两个分数都化简为最简分数然后直接比较就好了。

$\frac{p}{q}$ 应该很好求,关键就是后面那一大串式子怎么求,直接求肯定不行,除非你想使用臭名昭著的高精度算法。

可以考虑一边求一边约分,将假分数直接换成带分数计算会简单很多。

约分需要用到求最大公约数,我个人比较喜欢用辗转相除法(又叫欧几里得算法),还不会的同学可以先去看一下最大公约数(洛谷居然没有一道最大公约数的板子题)。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long//emm…… 
const int N=100;
int a[N];
int gcd(int a,int b){
    return b?gcd(b,a%b):a;//gcd模板 
}
signed main(){
    int n,q,p;
    cin>>p>>q>>n;
    int tmp=gcd(q,p);
    p/=tmp,q/=tmp;//先约分 
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int fz=a[n],fm=1;
    for(int i=n-1;i>=1;i--){
        int t=gcd(fz,fm);
        fz/=t,fm/=t;//约分 
        swap(fz,fm); 
        fz=fm*a[i]+fz;//假分数化带分数,a[i]相当于整数部分 
    }
    if(p==fz&&q==fm) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}
posted @ 2023-12-25 21:21  very_easy  阅读(6)  评论(0)    收藏  举报  来源