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

เขียนฟังก์ชันวนซ้ำ O(Log y) สำหรับ pow(x, y) ใน C++


ในปัญหานี้ เราได้รับจำนวนเต็ม x และ y สองจำนวน งานของเราคือการสร้างฟังก์ชันที่จะเทียบเท่ากับ pow(x,y) โดยใช้วิธีการวนซ้ำซึ่งจะทำให้งานเสร็จสิ้นในเวลาที่ซับซ้อนเป็น 0(Log y)

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

อินพุต

x = 7 , y = 3

ผลลัพธ์

343

ฟังก์ชันวนซ้ำสำหรับ pow(x,y) จะวนซ้ำและอัปเดตผลลัพธ์สำหรับค่าคี่ของ y คูณด้วย x และอัปเดต x เป็น x2 ทุกครั้งที่วนซ้ำ

โปรแกรมแสดงการดำเนินการแก้ไข

ตัวอย่าง

#include <iostream>
using namespace std;
void calcPower(int x, unsigned int y) {
   int result = 1;
   while (y > 0) {
      if (y & 1)
      result *= x;
      y = y >> 1;
      x = x * x;
   }
   cout<<result;
}
int main() {
   int x = 7;
   unsigned int y = 3;
   cout<<x<<" raised to "<<y<<" is ";
   calcPower(x,y);
   return 0;
}

ผลลัพธ์

raised to 3 is 343