yazılım,c# ve domates kabuğu
« VB.Net ÜzerineSilver Bullet »

bir sayının 2 üzeri olup olmadığını bulmak

  16. 05. 09 22:48, by ertan, Categories: Coding, Algoritma Soruları

Yetki kontrolleri için hazırladığımız kütüphanede ihtiyacımız olduğundan ve birazda enteresan bir problem olduğu için buraya da yazmak istedim.

elinizdeki herhangi bir sayının 2 üssü bir sayı olup olmadığını kontrol edecek bir fonksiyon yazın. hızlı çalışması için optimize edin.

örneğin;

8 (2 ^ 3) için true verecek.

128 (2 ^ 7) için true verecek.

132 için false ferecek.

not : hızlı çalışması gerektiği için logaritma gibi fonksiyonlar en son seçenektir.

sonradan gelen düzenleme : yazının güncelliğini koruması için doğru olmayan çözümleri yayınlıyorum sadece.

sonradan gelen ek düzenleme :

Bu açıklamayı yaptığıma biraz üzülüyorum ama 2'nin üsleri ile 2'ye bölünebilir olmak farklı şeylerdir.

Örnek;

6 rakamı 2'ye bölünebilir ama 2 üssü bir rakam değildir.

8 rakamı 2'ye bölünebilir ve 2 üssü (2^3) bir rakamdır.

7 comments

Comment from: Sinan [Visitor]
Sinan

long int max’a kadar olan tum 2^leri pre calculate et bir array’e at sonra binary search yap cok istersen. kac tane var ki?

27. 08. 09 @ 19:47
Comment from: torun [Visitor]
torun

return x%2==0

h?zl? m? bilmiyorum ama k?sa
:)

03. 09. 09 @ 09:58
Comment from: Barış Atamer [Visitor]
Barış Atamer

while(sayi!=1){
if(sayi%2!=0) return false;
else sayi=sayi/2;
}

return true;

17. 11. 09 @ 21:38
Comment from: Daner [Visitor]
Daner

post gönderile uzun zaman olmu? ama eklemek istedim.
Say?n?n binary olarak kar??l???na bakar?z, 2 üzeri olan say?lar?n içinde tek 1 vard?r ve bu 1 en sonda de?ildir.

23. 11. 09 @ 01:18
Comment from: Aytek Üstündağ [Visitor]  
Aytek Üstündağ

C++ da biraz daha k?salt?labilir, C# için yazd?m. Güzel soru.

public bool ikininKatiMi(uint n) {
byte count = 0;
byte maxbitcount = sizeof(uint) < < 3;
uint number=1;
while (–maxbitcount>0)
{
if ((n &number) == number) if (++count > 1) return false;
number<<=1;
}
return count!=0;
}

20. 06. 10 @ 15:07
Comment from: Hasan [Visitor]
Hasan

return x%2==0 ifadesi,

bu ifade istenen mi ki, neden konmu? anlamad?m. 132 için sa?lamaz

08. 07. 10 @ 09:03
Comment from: Koray B. [Visitor]
Koray B.

Asagidaki recursive method bu isi cozer sanirim. 2′nin kati ise 1 degilse 0 dondurur.

public static int CheckPower(int i)
{
if (i%2 != 0) {return 0;}
else
{
if (i/2 == 1){return 1;}
else{return CheckPower(i/2);}
}
}

19. 02. 11 @ 11:57

Leave a comment


Your email address will not be revealed on this site.
  
(For my next comment on this site)
(Allow users to contact me through a message form -- Your email will not be revealed!)
Text Renderers:
 

©2017 by Ertan Tike

Contact | Help | b2evo skin by Asevo | framework | vps hosting | François