C++ 用分治法求一个数的n次方根

C++ 用分治法求一个数的n次方根,c++,algorithm,divide-and-conquer,cmath,C++,Algorithm,Divide And Conquer,Cmath,我需要关于如何得到某个数的n次方的帮助 用户输入数字n和他想要的根数。我需要在没有cmath库的情况下用分治法解决这个问题 下面是我的代码,它还不能工作: #include<iostream> using namespace std; float pow(float a,float c){ if (a == 0) return 0; else if(a == 1) return 1; else{ float p

我需要关于如何得到某个数的n次方的帮助

用户输入数字n和他想要的根数。我需要在没有cmath库的情况下用分治法解决这个问题

下面是我的代码,它还不能工作:

#include<iostream>
using namespace std;

float pow(float a,float c){
    if (a == 0)
        return 0;
    else if(a == 1)
        return 1;
    else{
        float p = pow(a,(c/2));
        if(c%2)
            return p*p*a;
        else
            return p*p;
    }
}

int main(){
    float a,b;
    float c;
    cout << "Enter positive number:(base)" << endl;
    do{
        cin >> a;
    }while (a < 0);
    cout << "Enter number: (root)" << endl;
    cin >> b;
    c = 1/b;
    cout << "Result:"<<pow(a,c) << endl;
    system("pause");
    return 0;
}
#包括
使用名称空间std;
浮子功率(浮子a、浮子c){
如果(a==0)
返回0;
如果(a==1),则为else
返回1;
否则{
浮动p=功率(a,(c/2));
如果(c%2)
返回p*p*a;
其他的
返回p*p;
}
}
int main(){
浮子a、b;
浮点数c;
库塔;
}a<0;
cout b;
c=1/b;

让我告诉你如何用分治法求平方根。第n个根应该是相似的


对于给定的数字
x
,您需要搜索它在
0
x
之间的平方根。将其除以
2
=
x2
。如果
x2*x2
x
,则您的搜索空间将移动到
x2->x
,否则它将是
0->x2
。如果
x2*x2
x
匹配,则平方根为
x2
。n次方根的类似技术。

让我告诉你如何使用分治法求平方根。第n个根应该是相似的


对于给定的数字
x
,您需要搜索它在
0
x
之间的平方根。将其除以
2
=
x2
。如果
x2*x2
x
,则您的搜索空间将移动到
x2->x
,否则它将是
0->x2
。如果
x2*x2
x
匹配,则平方根为
x2
。n次方根的类似技术。

对于那些没有进行数值实验的人:使用
函数
sqrt
cbrt
(立方根)构造可由2和3分解的任意根。例如,第四个根是
sqrt(sqrt(x))
,第六个根是
sqrt(cbrt(x))
。如果你需要一些通用的东西,你可以构造一个递归函数,适当地调用
sqrt
cbrt


我猜这会给出比pow更快更准确的答案,如果这很重要的话。如果没有,只需使用
pow

就可以了:使用
函数
sqrt
cbrt
(立方根)来构造可由2和3分解的任意根。例如,第四个根是
sqrt(sqrt(x))
,第六个根是
sqrt(cbrt(x))
。如果你需要一些通用的东西,你可以构造一个递归函数,适当地调用
sqrt
cbrt


我猜这会给出比pow更快更准确的答案,如果这很重要的话。如果没有,只需使用
pow

如果指数为负,则相反。如果指数为负,则相反。带
c%2
的行不应编译。带
c%2
的行不应编译。当指数相乘时,sqrt(cbrt(x))将给出第六个根。这不是获得不均匀指数的方法roots@transistor啊,这是一个愚蠢的错误(已修复)。当然,2x3=6。谢谢但我也应该指出3x3=9.)当指数相乘时,sqrt(cbrt(x))将给出第六个根。这不是获得不均匀指数的方法roots@transistor啊,这是一个愚蠢的错误(已修复)。当然,2x3=6。谢谢但我也应该指出3x3=9.)