Potęgowanie za pomocą pętli

0

Witam!
Od kilku dni próbuję napisać program który liczy potęgę. Wymyśliłem coś takiego ale zwraca błędny wynik;

 #include <iostream>
int n, p, wynik;
using namespace std;

int main()
{
    cin >> n >> p;
    for(int i = 1; i<=p; i++)
        wynik = wynik + i*n;
    cout << wynik;
    return 0;
}

Z góry dziękuję za podpowiedzi

0

wynik *= n; + dodatkowo musisz gdzieś na początku ustawić wynik na 1.
Poza tym używanie do tego celu zmiennych globalnych jest złe.

1

Dlaczego Twoje zmienne są zmiennymi globalnymi?
Ale przechodząc do tematu wątku. Najprostszym rozwiązaniem jest dołączenie biblioteki, która ma już tą funkcję. "#include <cmath>" i w kodzie później piszesz tylko pow(a,b); rzuć okiem tutaj: http://www.cplusplus.com/reference/cmath/pow/
Ale jeśli chciałbyś napisać to sam, (dla wykładnika będącego liczbą naturalną)(!) to wystarczy w pętli n razy (gdzie n to wykładnik potęgi) pomnożyć zmienną zainicjalizowaną wartością jeden przez podstawę. Wyglądać to może tak:

#include <iostream>

using namespace std;
 
int main(void)
{
 unsigned int wykladnik;//wykladnik bedzie liczba nieujemna
 int podstawa,wynik=1;//wynik musi miec przypisana wartosc 1
 cin>>podstawa>>wykladnik;
 while(wykladnik--)//wykonuj aż wykładnik != 0, zatem wykonaj wykladnik (na początku)razy
  wynik*=podstawa;///*to znaczy:*/ wynik=wynik*podstawa;
 cout<<wynik<<'\n';
 return 0;
}

Co dla liczb pary liczb (Z;N)* rozwiązuje nam to zadanie. Można zmienić podstawę na typ np. double (wtedy też wynik), ale bez innych modyfikacji wykładnik musi pozostać w typie unsigned int.
*Podstawa całkowita, wykładnik naturalny.

0
int potega(int liczba, int wykladnik)
{
    int temp = liczba;
    for(int i = 1; i < wykladnik; ++i)
        liczba *= temp;
    return liczba;
}
0
spartanPAGE napisał(a):
int potega(int liczba, int wykladnik)
{
    int temp = liczba;
    for(int i = 1; i < wykladnik; ++i)
        liczba *= temp;
    return liczba;
}

Hmm ja bym to zapisał inaczej:

long long potega(int liczba, int wykladnik)
{
    int temp = 1;
    if(liczba == 0) return 0;
    else if(liczba == 1) return 1;
    else if(wykladnik == 1) return liczba;
    else if(wykladnik == 0) return 1;
    else
    {
        for(int i = 0; i < wykladnik; i++)
        {
            temp *= liczba;
        }
    }
    return temp;
}
 
0

@up nie wystarczy po prostu:

long long potega(int liczba, int wykladnik)
{
    long long temp = 1;
    for(int i = wykladnik; i > 0; i--)
        {
            temp *= liczba;
        }
    
    return temp;
}

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