potęgi c++

0

Mam za zadanie napisanie programu wypisujący kolejne potęgi liczby 2, nie większe od wprowadzonej liczby naturalnej n.
Stworzyłem coś takiego:

#include <iostream>
#include <math.h>
#include <cstdlib>
using namespace std;

int main() {
int n, a, i;
//n wprowadzona liczba
//a liczba po podniesiuenu do potęgi
//wykładnik potęgi
cout<<"Podaj liczbe";
cin>>n;
i = 0;
a = 0;
while (a<=n)
{
    a = pow(2,i);
    cout<<a<< endl;
    i++;
}

} 

tylko że wypisuje mi przy wprowadzeniu liczby 10 również 16 a chciałbym żeby na 8 zakończył swoje działanie jak to zrobić?

1

To straszne! Miałeś pewnie nauczyć się operatorów języka:

#include <iostream>
using namespace std;

int main()
  {
   cout<"Podaj liczbe: ";
   unsigned long long N;
   cin>>N;
   for(unsigned long long i=1;i<=N;i<<=1) cout<<' '<<i;
   return 0;
  }

Co nie tak w programie:

  1. Bezmyślnie używasz postinkrementacji: http://4programmers.net/Forum/1101404
  2. Nie używasz formatowania kodu: http://4programmers.net/Forum/998482
  3. Dołączasz zbędne pliki nagłókowe
  4. Użyłeś typ int tak jakby kolejna potęga dwójki mogła by stać ujemną.
  5. Użyłeś pow który służy do potęg zmiennoprzecinkowych (np: pow(3.14,2.7)) i liczy się przeważnie jako pow(a,b) => exp(a*log(b)) zamiast przesunięcia bitowego
  6. Wsadzasz spacje do kodu na chybił trafił
  7. Nie używasz inicjalizacji szeregowej (np: i=a=0;)
  8. Najpierw sprawdzasz czy a jest potrzebna, po czym obliczasz nową a - którą sprawdzasz dopiero po wyświetleniu.
0

@przemyslowiec Tak na oko to zamiast <= daj <

1 użytkowników online, w tym zalogowanych: 0, gości: 1