1

我需要有关如何获得某个数字的第 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;
}

关于如何解决这个问题的任何想法都将非常有用。

4

2 回答 2

8

让我告诉你如何使用分而治之来求平方根。第 n 个根将是相似的。

对于给定的 number ,您需要在和x之间搜索它的平方根。除以= 。如果<则您的搜索空间将移动到,否则它将是。如果匹配,则您的平方根为。第 n 个根的类似技术。0x2x2x2 * x2xx2 -> x0 -> x2x2 * x2xx2

于 2012-06-29T18:07:55.847 回答
1

对于那些不做数值实验的人:使用<cmath>函数sqrtand cbrt(cube-root) 来构造可被 2 和 3 分解的任何根。例如,第 4 个根是sqrt(sqrt(x)),第 6 个根是sqrt(cbrt(x))。如果您需要一般用途的东西,您可以构造一个适当调用的递归sqrt函数cbrt

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

于 2015-04-27T17:16:17.913 回答