• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

program do sprawdzania czy liczba jest potęgą 2 - Sprawdzenie poprawności kodu

42 Warsaw Coding Academy
+1 głos
2,054 wizyt
pytanie zadane 23 października 2021 w C i C++ przez mn130496 Gaduła (3,530 p.)
edycja 23 października 2021 przez draghan

Witam 

Mam takie zadanie: Napisz program, który sprawdzi czy podana liczba jest potęgom liczby 2. Napisałem taki program 

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int liczba;
   printf("Podaj liczbe: ");
   scanf("%d", &liczba);

   while(liczba % 2 == 0)
   {
       liczba = liczba / 2;
   }
    if(liczba == 1)
    {
        printf("Podana liczba jest potegom 2");
    }
    else
    {
        printf("Podana liczba nie jest potegom 2");
    }

    return (0);
}

Program działa jak należy ale chciałem się upewnić czy aby napewno jest to zrobione jak należy czy można to zrobić inaczej lepiej?. Prosiłbym, żeby ktoś odpowiedział na moje pytanie. Z góry dziękuję.

1 odpowiedź

+1 głos
odpowiedź 23 października 2021 przez jqakubx Użytkownik (740 p.)
Złożoność twojego algorytmu to O(log(2)n), da się to zrobić lepiej i szybciej np. w złożoności O(1).

Można to zrobić porównując bity liczby. Zauważ że potęgi dwójki np. 16 mają w zapisie bitowym tylko jedną jedynkę:

10000. Liczba 15 to 01111. Za pomocą operatora & sprawdzisz czy liczby będą miały w jakimś tym samym miejscu jedynki.

Dla 10000 & 01111 = 00000 => 0. Więc wystarczy zwrócić dla jakiejś liczby x:    x && (!(x&(x-1))). Sprawdzamy jeszcze po lewej stronie x żeby sprawdzić czy nie równa się zero.
1
komentarz 23 października 2021 przez Wiciorny Ekspert (280,610 p.)
dokładnie operacja XOR jest operacją rozwiązująca ten problem

Podobne pytania

0 głosów
1 odpowiedź 918 wizyt
+2 głosów
2 odpowiedzi 576 wizyt
pytanie zadane 16 października 2021 w Algorytmy przez mn130496 Gaduła (3,530 p.)
0 głosów
1 odpowiedź 3,605 wizyt
pytanie zadane 2 marca 2019 w Java przez mn130496 Gaduła (3,530 p.)

93,377 zapytań

142,380 odpowiedzi

322,532 komentarzy

62,727 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...