2012-06-29 72 views
1

我需要如何獲得某個數的第n個根的幫助。使用分治法找到一個數的第n個根

用戶輸入他想要的號碼n和號碼。我需要解決這個問題,不用cmath lib和分而治之的方法。

這裏是我的代碼,還沒有工作:

#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; 
} 

對如何處理這個問題會比更多有用的任何想法。

+3

帶'c%2'的行不應該編譯。 –

回答

8

讓我告訴你如何使用分而治之找到平方根。第n根將是相似的。

對於給定數字x,您需要搜索它在0x之間的平方根。將它除以2 = x2。如果x2 * x2 < x那麼您的搜索空間將移動到x2 -> x或否則它將是0 -> x2。如果x2 * x2匹配x那麼你的平方根是x2。類似的技術爲N根。

+0

非常感謝你! –

+1

如果指數是負數,則反過來。 –

1

對於那些不這樣做數值實驗:使用<cmath>功能sqrtcbrt(立方根)來構建任何根是由2和3例如可分解,第四根是sqrt(sqrt(x))和第六根是sqrt(cbrt(x)) 。如果您需要一些常規用途,您可以構建一個遞歸函數,適當調用sqrtcbrt

我猜這會給出比pow更快,更準確的答案,如果這很重要的話。如果沒有,請使用pow

+0

sqrt(cbrt(x))將給出第6根,因爲指數倍增。這是沒有辦法得到不均勻的指數根 – transistor

+0

@transistor argh,這是一個愚蠢的錯誤(固定)。當然2x3 = 6。謝謝!但我也應該指出3x3 = 9。 :) – Pete