getNthRoots函数错误答案

时间:2014-11-27 02:19:53

标签: c++ c

所以我有一个功能

 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(数字^ n)的数字,它们在min(a,b,c)和max(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 个答案:

答案 0 :(得分:0)

1 / n计算结果为0,因为它被评估为整数表达式。尝试用&#34; 1.0 / n&#34; s替换所有&#34; 1 / n&#34; s。

注意处理n为0的情况。