Cara Mengecek Apakah Sebuah Angka Merupakan Pangkat Dua di C++
Dalam pemrograman C++, terkadang kita perlu memeriksa apakah sebuah angka merupakan pangkat dua. Contohnya, kita ingin mengetahui apakah bilangan 16 merupakan pangkat dua, atau bilangan 25 bukan merupakan pangkat dua.
Ada beberapa cara untuk melakukannya:
1. Menggunakan Operator Bitwise
Metode ini memanfaatkan sifat dari angka yang merupakan pangkat dua. Angka pangkat dua memiliki hanya satu bit yang dihidupkan (set) dalam representasi binernya.
Berikut adalah kode C++ untuk memeriksa apakah sebuah angka merupakan pangkat dua:
#include
using namespace std;
bool isPowerOfTwo(int n) {
// Jika n kurang dari atau sama dengan 0, bukan pangkat dua
if (n <= 0) {
return false;
}
// Lakukan operasi bitwise AND antara n dan n-1
return (n & (n - 1)) == 0;
}
int main() {
int number = 16;
if (isPowerOfTwo(number)) {
cout << number << " adalah pangkat dua." << endl;
} else {
cout << number << " bukan pangkat dua." << endl;
}
return 0;
}
Penjelasan:
isPowerOfTwo(int n)
adalah fungsi yang mengembalikantrue
jikan
adalah pangkat dua, danfalse
jika tidak.n & (n - 1)
melakukan operasi bitwise AND antaran
dann-1
.- Jika
n
adalah pangkat dua, maka hanya satu bit yang dihidupkan dalam representasi binernya. Ketika dikurangi 1, bit tersebut akan dimatikan, dan semua bit yang lebih rendah akan dihidupkan. Operasi AND akan menghasilkan 0 karena tidak ada bit yang dihidupkan pada kedua angka tersebut.
2. Menggunakan Loop
Metode ini lebih mudah dipahami, namun mungkin sedikit kurang efisien dibandingkan metode bitwise.
#include
using namespace std;
bool isPowerOfTwo(int n) {
// Jika n kurang dari atau sama dengan 0, bukan pangkat dua
if (n <= 0) {
return false;
}
// Jika n adalah 1, maka merupakan pangkat dua
if (n == 1) {
return true;
}
// Lakukan loop hingga n menjadi 1
while (n > 1) {
// Jika n tidak habis dibagi 2, bukan pangkat dua
if (n % 2 != 0) {
return false;
}
// Bagi n dengan 2
n /= 2;
}
// Jika loop selesai, n adalah pangkat dua
return true;
}
int main() {
int number = 16;
if (isPowerOfTwo(number)) {
cout << number << " adalah pangkat dua." << endl;
} else {
cout << number << " bukan pangkat dua." << endl;
}
return 0;
}
Penjelasan:
isPowerOfTwo(int n)
adalah fungsi yang mengembalikantrue
jikan
adalah pangkat dua, danfalse
jika tidak.- Fungsi tersebut terlebih dahulu memeriksa apakah
n
kurang dari atau sama dengan 0 atau sama dengan 1. - Kemudian, fungsi melakukan loop hingga
n
menjadi 1. - Pada setiap iterasi, fungsi memeriksa apakah
n
habis dibagi 2. Jika tidak, makan
bukan pangkat dua. - Jika loop selesai tanpa menemukan bahwa
n
tidak habis dibagi 2, makan
adalah pangkat dua.
3. Menggunakan Fungsi Logaritma
Metode ini menggunakan fungsi logaritma untuk memeriksa apakah sebuah angka merupakan pangkat dua.
#include
#include
using namespace std;
bool isPowerOfTwo(int n) {
// Jika n kurang dari atau sama dengan 0, bukan pangkat dua
if (n <= 0) {
return false;
}
// Hitung logaritma basis 2 dari n
double log2n = log2(n);
// Jika logaritma basis 2 dari n adalah bilangan bulat, maka n adalah pangkat dua
return (log2n - floor(log2n)) == 0;
}
int main() {
int number = 16;
if (isPowerOfTwo(number)) {
cout << number << " adalah pangkat dua." << endl;
} else {
cout << number << " bukan pangkat dua." << endl;
}
return 0;
}
Penjelasan:
isPowerOfTwo(int n)
adalah fungsi yang mengembalikantrue
jikan
adalah pangkat dua, danfalse
jika tidak.- Fungsi tersebut terlebih dahulu memeriksa apakah
n
kurang dari atau sama dengan 0. - Kemudian, fungsi tersebut menghitung logaritma basis 2 dari
n
menggunakan fungsilog2()
. - Jika logaritma basis 2 dari
n
adalah bilangan bulat, makan
adalah pangkat dua.
Pilihlah metode yang paling sesuai dengan kebutuhan Anda. Metode bitwise biasanya merupakan metode yang paling efisien, sedangkan metode loop lebih mudah dipahami. Metode logaritma dapat digunakan jika Anda memiliki kebutuhan khusus untuk menggunakan fungsi logaritma.