Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

รากที่ห้าของตัวเลขใน C++


ในปัญหานี้ เราได้รับตัวเลข N หน้าที่ของเราคือค้นหาค่าพื้นของรากที่ห้าของตัวเลข

รากที่ห้า ของตัวเลขคือจำนวนที่เมื่อคูณตัวเอง 5 ครั้งจะคืนค่าตัวเลข

ถ้า N 1/5 =แล้ว a*a*a*a*a =N .

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล: ไม่มี =325

ผลลัพธ์: 3

คำอธิบาย:

รากที่ห้าของ 325 คือ 3.179 ซึ่งมีมูลค่าพื้นเท่ากับ 3

แนวทางแก้ไข:

วิธีแก้ปัญหาง่ายๆ คือข้ามจาก 1 ถึง n และการหาจำนวนที่เมื่อคูณตัวเองห้าครั้งจะได้จำนวน

ในที่นี้ หาค่าที่แน่นอนไม่ได้เพราะตัวเลขไม่ใช่ยกกำลังห้าที่สมบูรณ์แบบเสมอไป ดังนั้น เราจะหาค่าแรกที่ทำให้ยกกำลังที่ 5 มากกว่า n แล้วคืนค่า -1 เพื่อให้ได้ค่ารากที่ 5

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#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