C++ 中的五次方根


在這個問題中,我們給定一個數字 N。我們的任務是找到該數字五次方根的向下取整值。

五次方根是一個數,當它自身相乘 5 次時,結果等於該數。

如果 N1/5 = a,則 a*a*a*a*a = N

讓我們來看一個例子來理解這個問題:

輸入:N = 325

輸出:3

解釋:

325 的五次方根是 3.179,其向下取整值為 3。

解決方案:

一個簡單的解決方案是從 1 到 n 遍歷。並找到一個數,當它自身相乘五次時,結果等於該數。

在這裡,無法找到精確值,因為這些數並不總是完美的五次方。因此,我們將找到第一個使得五次方大於 n 的值,然後返回該值 -1 來獲得五次方根的向下取整值。

程式演示了我們解決方案的工作原理:

示例

線上演示

#include<iostream>
using namespace std;

int calcFifthRoot(int n) {
   
   if (n == 0 || n == 1)
      return n;

   int a = 0;
   for(a = 1; a*a*a*a*a < n ; a++){
     
   }
   return (a - 1);
}

int main() {
   
   int n = 325;
   cout<<"The Floor of fifth root of "<<n<<" is "<<calcFifthRoot(n);
   return 0;
}

輸出 -

The Floor of fifth root of 325 is 3

此演算法很好,但是可能存在更好的解決方案。這可以透過更新搜尋演算法並使用二分查詢演算法來搜尋該數字的五次方根來實現。

程式演示了我們解決方案的工作原理:

示例

線上演示

#include<iostream>
using namespace std;

int calcFifthRoot(int n)
{
   if (n == 0 || n == 1)
   return n;

   int start = 1, end = n, root = 0;
   while (start <= end)
   {
      int a = (start + end) / 2;
      long int apowfive = a*a*a*a*a;

      if (apowfive == n)
         return a;
      if (apowfive < n) {
         
         start = a + 1;
         root = a;
      }
      else
         end = a - 1;
   }
   return root;
}

int main() {
   
   int n = 250;
   cout<<"The floor of fifth root of "<<n<<" is "<<calcFifthRoot(n);
   return 0;
}

輸出 -

The floor of fifth root of 250 is 3

更新於:2021年1月22日

870 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告