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; } } }