Rumah >pembangunan bahagian belakang >C++ >Adakah nombor kuasa 2? Bagaimanakah kita dapat menentukan ini dengan cekap?
sama ada bilangan angka adalah 2 adalah kuasa 2
Kod ini mudah dan jelas.
Kaedah untuk menyelesaikan masalah ini adalah untuk melancarkan 2 kuasa berterusan, periksa sama ada kuasa -dalam -satu sepadan dengan nombor input. Ini boleh dilaksanakan seperti berikut: Kaedah 2: Bilangan algoritma pengiraan
Kaedah lain melibatkan pengiraan penggunaan bilangan pasangan. Walau bagaimanapun, ini memerlukan berhati -hati kerana pengiraan terapung boleh menyebabkan ketepatan. Pertimbangkan kod berikut:
<code class="language-c#">private bool IsPowerOfTwo(ulong number) { if (number == 0) return false; for (ulong power = 1; power > 0; power <<= 1) { if (power == number) return true; if (power > number) return false; } return false; }</code>
Penyelesaian Optimal: Kaedah Pengkomputeran Bit Penyelesaian yang lebih berkesan adalah penggunaan operasi bit. Kuasa 2 mempunyai ciri yang unik: apabila (x -1) dilakukan dan operasi (&), nilai hasil selalu 0. Atribut ini boleh dinyatakan seperti berikut:
Untuk menghapuskan calon kuasa sifar sebagai 2, ia boleh diubah sedikit:
<code class="language-c#">private bool IsPowerOfTwo_2(ulong number) { double log = Math.Log(number, 2); double pow = Math.Pow(2, Math.Round(log)); return pow == number; }</code>
Kaedah ini menyediakan penyelesaian yang cekap dan langsung untuk menentukan sama ada nombor itu 2.
<code class="language-c#">bool IsPowerOfTwo(ulong x) { return (x & (x - 1)) == 0; }</code>
Atas ialah kandungan terperinci Adakah nombor kuasa 2? Bagaimanakah kita dapat menentukan ini dengan cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!