前两项 A 和 B 是几何级数,代码应该找到 GP 的第 n 项。它在少数测试用例中执行,但在 A=84 的测试用例中失败; B=87; N=3。谁能告诉我为什么会发生这种情况,即使这种情况进一步发生,如何解决这个问题?
double termOfGP(int A,int B,int N)
{
int r;
r=(int)B/A;
return A * (int)(pow(r,N-1));
}
想一想
r
的价值是多少。在您的情况下,您使用 int
来存储 r
的值,这将导致实际结果向下舍入。
对于失败的测试,87/84 = 1.0357。但是您的
r
值将向下舍入为 1。对于通过的测试用例,您可能很幸运,因为该比率没有任何分数。
您应该使用 double 来存储 r 的值。或者您可以将方程修改为:
return A * (int)((double)(pow(B,N-1))/(double)(pow(A,N-1)));
//你是对的,只需要处理极端情况下的浮点 double termOfGP(int A,int B,int N) { 双 nthTerm = (A * (双) ( (双) pow(B, N-1) / (双) pow(A, N-1) ) );
return nthTerm;
}