Problem Description
度度熊最近学习了多项式和极限的概念。
现在他有两个多项式 f(x)f(x) 和 g(x)g(x),他想知道
当 x 趋近无限大的时候,f(x)/g(x) 收敛于多少。
Input
第一行一个整数T (1≤T≤100) 表示数据组数。 对于每组数据,第一行一个整数n (1≤n≤1,000),
n-1表示多项式 f(x) 和 g(x) 可能的最高项的次数(最高项系数不一定非0)。
接下来一行 n 个数表示多项式 f(x),第 i 个整数 fi(0≤fi ≤1,000,000) 表示次数为 i-1 次的项的系数。
接下来一行 n 个数表示多项式 g(x),第 i 个整数 gi(0≤gi <=1,000,000) 表示次数为 i-1 次的项的系数。
数据保证多项式 f 和 g 的系数中至少有一项非0。
Output
对于每组数据,输出一个最简分数 a/ba/b(aa 和 bb 的最大公约数为1)表示答案。 如果不收敛,输出 1/01/0。
Sample Input
3
2
0 2
1 0
2
1 0
0 2
3
2 4 0
1 2 0
Sample Output
1/0
0/1
2/1
样例描述
这些多项式分别为
f(x) = 2xf(x)=2x
g(x) = 1g(x)=1
f(x) = 1f(x)=1
g(x) = 2xg(x)=2x
f(x) = 4x + 2f(x)=4x+2
g(x) = 2x + 1g(x)=2x+1
思路解析:根据数学可知,多项式f(x) / g(x)在x趋于无穷大时求是否存在极限,只需要判断两式中最高次系数之比,若此时f(x)系数为0,为“0/1”,若该项g(x)系数为0,则不收敛为“1/0”。若收敛,则再用gcd化为最简分数即可。
#include<bits/stdc++.h>
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
}
int main() {
fio
int t;
cin >> t;
int num;
int f[1005], g[1005], a = 0;
while (t--) {
cin >> num;
for (int i = 0; i < num; i++)
cin >> f[i];
for (int i = 0; i < num; i++)
cin >> g[i];
int fmax, gmax;
for (int i = num-1; i >= 0; i--) {
if (f[i] != 0 || g[i] != 0) {
fmax = f[i];
gmax = g[i];
break;
}
}
if (gmax == 0) cout << "1/0" << endl;
else if (fmax == 0) cout << "0/1" << endl;
else {
int m = gcd(fmax, gmax);
fmax = fmax/m;
gmax = gmax/m;
cout << fmax << "/" << gmax << endl;
}
}
}