题目描述
?
比如?n=3,a1=1,a2=2,a3=3,b1=3,b2=2,b3=1时
?
给定n,ai,i=1,2,…,n,请求x,并按最简方式表示x。
输入
第一个行是一个整数T(1≤T≤100),表示样例的个数。 以后每个样例的第一行为整数n(1≤n≤9); 第二行为n个整数,为ai,(1≤ai≤100); 第三行为n个整数,为bi,(1≤bi≤100)。
输出
按顺序输出一个样例的结果,如果结果为整数,输出整数;如果结果为分数,格式为"分子/分母",保证分子与分母互质。
样例输入
3
3
1 2 3
3 2 1
3
1 2 3
4 7 1
9
100 100 100 100 100 100 100 100 100
99 99 99 99 99 99 99 99 99
样例输出
21/13
1
1060072063970000499/1081277664009800500
解这道题首先要找到运算的规律,然后每一步将分子与分母分别计算出来,最后判断
是否能整除,不能就同除以最大公因数。
#include <stdio.h>
long long gcd(long long a,long long b)
{
return b ? gcd(b,a%b):a;
}
int main()
{
int t,a[11],b[11],n,i;
long long up,down,temp,g;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
for(i = 0;i < n;i++)
{
scanf("%d",&b[i]);
}
up = 0;down = 1;temp = 1;
for(i = n-1;i >= 0;i--)
{
down = a[i]*down+up;
up = b[i]*temp;
temp = down;
}
if(up%down==0)
printf("%lld\n",up/down);
else
{
g = gcd(up,down);
up /= g;
down /= g;
printf("%lld/%lld\n",up,down);
}
}
return 0;
}
|