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;
}