Może zacznijmy od rozwiązania matematycznego, ale uwzględniającego ograniczenia języka C++.
Otóż najlepiej jest policzyć logarytm o podstawie 3 z danej liczby, a następnie sprawdzić, czy liczba ta jest całkowita (tudzież: czy jej podłoga i sufit jest równa temu samemu). Oczywiście operujemy na liczbach zmiennoprzecinkowych (rzeczywistych).
Ponieważ nie ma funkcji w C++, która pozwalałaby nam policzyć logarytm o podstawie 3, musimy wykorzystać wzór na iloraz logarytmów o tej samej podstawie (i użyjemy liczby
e, jako podstawy).
\(\displaystyle{ \frac{\log_ca}{\log_cb} = \log_ba}\)
Kod: Zaznacz cały
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
double liczba;
cout << "Podaj liczbe: ";
cin >> liczba;
double logliczba = log(liczba);
double logpodstawa = log(3);
double log3liczba = logliczba/logpodstawa;
if (ceil(log3liczba) == floor(log3liczba))
cout << "Jest potega 3! 3^" << log3liczba << endl;
else
cout << "Nie jest potega 3!" << endl;
}