Mr. Frog recently studied how to add two fractions up, and he came up with an evil idea to trouble you by asking you to calculate the result of the formula below:
As a talent, can you figure out the answer correctly?
As a talent, can you figure out the answer correctly?
For each test case, the first line contains only one integer n ( n≤8 ).
The second line contains n integers: a1,a2,⋯an(1≤ai≤10 ).
The third line contains n integers: b1,b2,⋯,bn(1≤bi≤10) .
You should promise that p/q is irreducible.
1 2 1 1 2 3
Case #1: 1 2
Here are the details for the first sample: 2/(1+3/1) = 1/2
思路:只需要模拟这个过程,从底部开始模拟;
分子:fz; 分母:fm;
初始值:fz = b[n-1]; fm = a[n-1];
然后:
for(int i = n - 2; i >= 0; i--) { fz = a[i]*fm + fz; int t = fm; fm = fz; fz = t*b[i]; }
最后判断一个gcd(fz , fm) , 然后就A了;
#include <stdio.h> int gcd(int m , int n) { if(n == 0) return m; else return gcd(n , m%n); } int main() { int N , sum = 0 , n; int a[10005]; int b[10005]; scanf("%d",&N); while(N--) { scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&a[i]); for(int i = 0; i < n; i++) scanf("%d",&b[i]); int fz = b[n - 1]; int fm = a[n - 1]; for(int i = n - 2; i >= 0; i--) { fz = a[i] * fm + fz; int t = fm; fm = fz; fz = t*b[i]; } printf("Case #%d: %d %d\n",++sum , fz/gcd(fz , fm) , fm/gcd(fz , fm)); } return 0; }