getNthRoot函数错误的答案

getNthRoots function wrong answers

本文关键字:答案 错误 函数 getNthRoot      更新时间:2023-10-16

所以我有一个函数

 Vector getNthRoots(double a, double b, double c, int n)
{
    Vector v;
    int i;
    v.length = 0;
    double m, a2, b2, c2;
    if (n % 2 == 0)
    {
        a2 = a;
        b2 = b;
        c2 = c;
        if (a<0)
            a2 = a*(-1);
        if (b<0)
            b2 = b*(-1);
        if (c<0)
            c2 = c*(-1);
        m = floor(pow(max(a2, b2, c2),1/n));
        for (i = 1; i <= m; i++)
        if (pow(i, n) >= min(a2, b2, c2) && pow(i, n) <= max(a2, b2, c2))
        {
            v.values[v.length] = i;
            v.length++;
            v.values[v.length] = (-1)*i;
            v.length++;
        }
        return v;
    }
    else {
        for (i = ceil(pow(min(a, b, c),1/n)); i <= floor(pow(max(a, b, c),1/n)); i++)
        if (pow(i, n) >= min(a, b, c) && pow(i, n) <= max(a, b, c))
        {
            v.values[v.length] = i;
            v.length++;
        }
        return v;
    }
}

这个函数应该给你幂 n (number^n) 处的数字,这些数字在最小 (a,b,c) 和最大 (a,b,c) 的间隔内;

其他函数/标头

double max(double a, double b, double c)
{
    if (a >= b && a >= c)
        return a;
    if (b >= a && b >= c)
        return b;
    if (c >= a && c >= b)
        return c;
    return a;
}
double min(double a, double b, double c)
{
    if (a <= b && a <= c)
        return a;
    if (b <= a && b <= c)
        return b;
    if (c <= a && c <= b)
        return c;
    return a;
}
#include <iostream>
#include <cmath>
using namespace std;
#define MAX_ARRAY_LENGTH 100
struct Vector
{
    unsigned int length;
    int values[MAX_ARRAY_LENGTH];
};

看来我无法得到好的答案.例如

对于getNthRoots(32,15,37,5),它应该返回一个向量[2],因为2^5 = 32属于区间[15,37]但我没有收到任何东西或 getNthRoots(32,1,7,5) 它应该返回一个向量 [1,2],但我只收到 1 作为答案

我猜这是for (i = ceil(pow(min(a, b, c),1/n)); i <= floor(pow(max(a, b, c),1/n)); i++)的问题,但我不知道如何解决它

1/n 的计算结果为 0,因为它被计算为整数表达式。尝试将所有"1/n"替换为"1.0/n"。

注意处理 n 为 0 的情况。