题目撞名
题目大意:
给出两个函数 (P(x),Q(x)).
(P(x)=a_0 imes x^N+a_1 imes x^{N-1}+a_2 imes x^{N-2} cdots a_{N-1} imes x+a_N)
(Q(x)=b_0 imes x^M+b_1 imes x^{M-1}+b_2 imes x^{M-2} cdots b_{M-1} imes x+b_M)
计算 (lim_{x o +infty}frac{P(x)}{Q(x)})
分析
先看一下极限的定义:设函数 (f(x)) 在点 (x_0) 的某一去心邻域内有定义,如果存在常数 (a),(forall varepsilon in mathbb{N}),(exists delta>0),使不等式(|f(x)-a|<varepsilon),在 (|x-x_0|in(0,delta)) 时恒成立,那么常数 (a) 就叫做函数 (f(x)) 当 (x o x_0) 时的极限,记作 (lim_{x o x_0}f(x)=a).(根本就不是人话)
定义非常简(kan)单(bu)明(dong)了,于是肯定会有人会用一种非常简单粗暴的方法去解决这道题,将一个非常大的数带入,然后计算,答案取一个近似值,那么问题来了,需要带怎样的一个数进去呢,又如何计算呢.所以这个方法显然就是错误的,那么就要从这两个函数入手了,可以发现 (lim_{x o +infty}frac{P(x)}{a_0 imes x^N}=1) 具体证明见洛必达法则,所以当 (x o +infty) 时,(P(x)=a_0 imes x^N),(Q(x)=b_0 imes x^M),所以就直接取比较这两个值就好了.当 (N>M)时结果为 (+infty) 或 (-infty),结果与 (a_0) 和 (b_0) 的正负性有关,如果 (a_0*b_0>0) 结果为 (+infty),反之为 (-infty).如果 (N<M) 时结果为 (0),当 (N=M) 时结果自然就是 (frac{a_0}{b_0}) 了.
代码
#include<bits/stdc++.h>
#define REP(i,first,last) for(int i=first;i<=last;++i)
#define DOW(i,first,last) for(int i=first;i>=last;--i)
using namespace std;
int N,M;
int a0,b0;//只要记录a0和b0
int Gcd(int a,int b)//需要约分
{
if(!b)
{
return a;
}
return Gcd(b,a%b);
}
int main()
{
scanf("%d%d",&N,&M);
int air;//没用的值
scanf("%d",&a0);
REP(i,1,N)
{
scanf("%d",&air);
}
scanf("%d",&b0);
REP(i,1,M)
{
scanf("%d",&air);
}
if(N<M)//如果N<M时最后的答案为0
{
printf("0/1");
return 0;
}
if(a0*b0<0)//如果a0*b0<时需要输出符号
{
printf("-");
a0=abs(a0);
b0=abs(b0);
}
if(N>M)//如果N>M时最终的结果为无穷大
{
printf("Infinity");
return 0;
}
int gcd=Gcd(a0,b0);//约分
a0/=gcd;
b0/=gcd;
printf("%d/%d",a0,b0);//输出答案
return 0;
}