题目:
题意:由上图可以看出要求最终分式的分子和分母,
思路:可以看出该分式由若干个分式组成,且每个分式的计算方法是一样的,所以可以吧一个大问题分为若干个小问题解决,所以可以使用递归解决(保留最简分数)
AC代码:
import java.io.*;
import java.math.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
for(int o=0;o<t;o++) {
int n=sc.nextInt();
int a[]=new int[n];
int b[]=new int[n];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
for(int i=0;i<n;i++) {
b[i]=sc.nextInt();
}
int arr[]=new int [2];
arr[0]=b[n-1];
arr[1]=a[n-1];
show(a,b,n-2,arr);
int p=gcd(arr[0],arr[1]);
arr[0]/=p;
arr[1]/=p;
// for(int i=2;i<=Math.min(arr[1],arr[0]);i++) {
// if(arr[0]%i==0&&arr[1]%i==0) {
// arr[0]/=i;
// arr[1]/=i;
// }
// }
System.out.println("Case #"+(1+o)+": "+arr[0]+" "+arr[1]);
}
}
public static int[] show(int a[],int b[],int x,int arr[]) {
if(x<0)return arr;
else {
int o=gcd(arr[0],arr[1]);
arr[0]/=o;
arr[1]/=o;
int m=arr[0];//上面的
int n=arr[1];//下面的
arr[0]=b[x]*n;
arr[1]=a[x]*n+m;
o=gcd(arr[0],arr[1]);
arr[0]/=o;
arr[1]/=o;
return show(a,b,x-1,arr);
}
}
private static int gcd(int a, int b) {
if(b==0)return a;
else return gcd(b,a%b);
}
}