Поэтому у меня есть функция
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], но я ничего не получаю и не получаю NthRoots (32,1,7, 5) он должен вернуть вектор [1,2], но я получаю только 1 как ответ
Я предполагаю, что здесь проблема for (i = ceil(pow(min(a, b, c),1/n)); я <= floor(pow(max(a, b, c),1/n)); i++)
но я не знаю, как я мог это исправить
1/n оценивается как 0, потому что он оценивается как целочисленное выражение. Попробуйте заменить все "1/n" на "1.0/n".
Постарайтесь обрабатывать случай, когда n равно 0.