所以我有一个功能
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++)
,但我不知道如何解决它
答案 0 :(得分:0)
1 / n计算结果为0,因为它被评估为整数表达式。尝试用&#34; 1.0 / n&#34; s替换所有&#34; 1 / n&#34; s。
注意处理n为0的情况。