สมมติว่าเรามีจำนวนไม่เป็นลบ n เราต้องหาจำนวน r ที่ r * r =n และเราต้องปัดเศษลงเป็นจำนวนเต็มที่ใกล้เคียงที่สุด เราต้องแก้ปัญหานี้โดยไม่ต้องใช้ฟังก์ชันสแควร์รูทในตัว
ดังนั้นหากอินพุตเป็น 1025 เอาต์พุตจะเป็น 32
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า n <=1 แล้ว
- ส่งคืน n
- เริ่ม :=1 สิ้นสุด :=n
- ขณะเริ่ม <สิ้นสุด ทำ
- กลาง :=เริ่ม + สิ้นสุด/2
- ถ้า mid * mid <=n แล้ว
- เริ่ม :=กลาง + 1
- มิฉะนั้น
- จบ :=กลาง
- คืนเริ่ม - 1
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, n): if n <= 1: return n start, end = 1, n while start < end: mid = start + end >> 1 if mid * mid <= n: start = mid + 1 else: end = mid return start - 1 ob = Solution() print(ob.solve(1025))
อินพุต
1025
ผลลัพธ์
32