เมื่อวานขณะที่เล่นกับลูกของฉันฉันสังเกตเห็นตัวเลขในรถไฟของเล่นของเขา:
เรามีที่สามารถแบ่งออกเป็นหรือ
ความท้าทายง่ายๆ: ให้ค่าที่ไม่ใช่ค่าลบเป็นอินพุตคืนค่าความจริงที่สอดคล้องกันและค่าเท็จที่แสดงว่าสตริงแทนตัวเลขหรือไม่ (ในฐาน 10 และไม่มีเลขศูนย์นำหน้า) สามารถแบ่งออกเป็นตัวเลขที่เป็นพลังของ 2 .
ตัวอย่าง:
4281 truthy (4-2-8-1)
164 truthy (16-4 or 1-64)
8192 truthy (the number itself is a power of 2)
81024 truthy (8-1024 or 8-1-02-4)
101 truthy (1-01)
0 falsey (0 cannot be represented as 2^x for any x)
1 truthy
3 falsey
234789 falsey
256323 falsey (we have 256 and 32 but then 3)
8132 truthy (8-1-32)
Tests for very large numbers (not really necessary to be handled by your code):
81024256641116 truthy (8-1024-256-64-1-1-16)
64512819237913 falsey
นี่คือรหัส - กอล์ฟดังนั้นอาจเป็นรหัสที่สั้นที่สุดสำหรับแต่ละภาษาที่ชนะ!
101
(เท็จเพราะ 0) ... หรือนี่ควรจะเป็นจริง ( 1 - 01
)?
101
กรณีที่มีคำตอบปัจจุบันและพวกเขากลับมาทั้งหมดtrue
เพราะมันสามารถแยกออก1-01
เป็นสองพลังของ 2 ดังนั้นฉันจะถือว่ากรณีนี้เป็นความจริง
log2(n)
ไม่มีเลขทศนิยมหลังเครื่องหมายจุลภาคหรือไม่ 2) n AND (n-1) == 0
ตรวจสอบว่า 3) สร้างรายการของช่องสี่เหลี่ยมและตรวจสอบว่าn
อยู่ในรายการนั้นหรือไม่
int
ประเภทมาตรฐาน(4 ไบต์) แต่จริงๆแล้วฉันไม่คิดว่ารหัสของคุณจะไม่รองรับจำนวนมาก เพียงระบุคำตอบในข้อ จำกัด ของรหัสของคุณ