สมมติว่าเรามีอินพุต x และ n สองตัว x คือตัวเลขในช่วง -100.0 ถึง 100.0 และ n คือจำนวนเต็มที่ลงนามแบบ 32 บิต เราต้องหา x ยกกำลัง n โดยไม่ใช้ฟังก์ชันไลบรารี
ดังนั้นหากอินพุตที่กำหนดคือ x =12.1, n =-2 เอาต์พุตจะเป็น 0.00683
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- อำนาจ :=|n| และ res :=1.0
- ในขณะที่กำลังไม่ใช่ 0
- ถ้าบิตสุดท้ายของกำลังเป็น 1 ดังนั้น res :=res * x
- x :=x * x
- ถ้า n <0
- คืน 1 / res
- ผลตอบแทน
ตัวอย่าง(Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −
class Solution(object): def myPow(self, x, n): power = abs(n) res = 1.0 while power: if power & 1: res*=x x*=x power>>=1 if n<0: return 1/res return res ob1 = Solution() print(ob1.myPow(45, -2)) print(ob1.myPow(21, 3))
อินพุต
45 -2 21 3
ผลลัพธ์
0.0004938271604938272 9261.0