HDOJ 5912 Fraction 【2016CCPC长春现场赛】数学
这次比赛的数学题真心是有点多,所以确实成了一个手速场的比赛
5题可以从铁排到银确实还是有点恐怖
这个题的意思:
求一个连分数的值:写成循环或者递归或者迭代的方式是最省时间和精力的
(这个题的n实在太小了,考察不了什么。如果n大一点,就不会有去暴力推公式的了,考察度能强那么一点)
#include<bits/stdc++.h>
using namespace std;
#define LL __int64
const int maxn=50;
LL fenzi,fenmu,newfenzi,newfenmu;
LL a[maxn],b[maxn];
int t,n;
LL gcd(LL x,LL y){
return x%y==0?y:gcd(y,x%y);
}
int main(){
//freopen("input.txt","r",stdin);
scanf("%d",&t);
for(int Case=1;Case<=t;Case++){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%I64d",&a[i]);
for(int i=1;i<=n;i++) scanf("%I64d",&b[i]);
fenzi=b[n]/gcd(b[n],a[n]);
fenmu=a[n]/gcd(b[n],a[n]);
//printf("%I64d %I64d\n",fenzi,fenmu);
for(int i=n-1;i>=1;i--){
newfenzi=b[i]*fenmu;
newfenmu=a[i]*fenmu+fenzi;
fenzi=newfenzi/gcd(newfenzi,newfenmu);
fenmu=newfenmu/gcd(newfenzi,newfenmu);
//printf("%I64d %I64d\n",newfenzi,newfenmu);
//printf("%I64d %I64d\n",fenzi,fenmu);
}
printf("Case #%d: %I64d %I64d\n",Case,fenzi,fenmu);
}
return 0;
}