Dün çocuğumla oynarken oyuncak trenindeki sayıyı fark ettim:
Elimizdeki Yani olduğunu içine bölünmüş olabilir veya
Bu yüzden basit zorluk: Girdi olarak negatif olmayan bir sayı verilirse, sayının dize gösteriminin (temel 10'da ve baştaki sıfırlar olmadan) bir şekilde 2'nin güçleri olan sayılara bölünüp bölünmeyeceğini temsil eden tutarlı bir gerçeği ve falsey değerleri döndürün .
Örnekler:
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
Bu kod golf , yani her dilin kazanması için en kısa kod olabilir!
101
(0 nedeniyle yanlış)) ... yoksa bu hala doğru 1 - 01
mu olmalı ( )?
101
şu anki cevaplarla test ettim ve hepsi geri döndü true
, çünkü 1-01
her ikisine de ayrılabileceği için ikisinin de ikisinin de gücü olduğu için bu davayı gerçeğe uygun göreceğim.
log2(n)
Virgülten sonra ondalık basamak içerip içermediğini kontrol edin . 2) kontrol edin n AND (n-1) == 0
. 3) Birim kare listesi oluşturun ve n
bu listede olup olmadığını kontrol edin .
int
tipte bir aralıkla (4 byte) sınırlamayı düşünmüştüm , ancak kodunuz çok büyük rakamları desteklemiyorsa aslında umursamıyorum. Cevaplarınızda sadece kodunuzun sınırlarını belirtin.