判斷乙個正整數是2的n次

2021-06-21 21:38:33 字數 865 閱讀 3005

判斷乙個正整數是2的n次,假設不包括0。

想了三種辦法。

第一種:任意乙個數,如果是1,則為2的n次,如果大於1,則1、判斷該數是否為偶數,是則轉2,否則不是2的n次。2、判斷該數是否為2,是則為2的n次,否則對2做整除運算後轉1。

在devc++上進行了實現,**如下:

#include using namespace std;

int main()

{ long int a;

cin>>a;

if(a==1)

cout<<"yes"<1)

{ if(a%2!=0)

{ cout<<"not"<

第二種:使用了log函式,但c++裡只有以e和10為底的log函式,所以需要借助換底公式。在devc++實現**如下:

#include #include using namespace std;

int main()

{ long int a,c;

double b;

cin>>a;

b=log(a)/log(2);

c=(int)b;

if(c==b)

cout<<"yes"<

第三種:自認為也是最簡單直接的一種,做位運算即得結果。

如果該數為2的n次,則與比該數小1的數做且運算後得0,否則不為零。

#include using namespace std;

int main()

{ long int a;

cin>>a;

if(!(a&(a-1)))

cout<<"yes"<

目前就想到這三種,如有錯誤歡迎指正,如有更佳的方案........大神,求指點啊。

判斷乙個整數是否是2的n次方

參考 如題,如何判斷乙個整數是否是2的n次方,我能想到的方法有兩個 1.一直除2,看最後是否等於1.最笨的方法 2.轉換成2進製,看是否是這個樣子的 1,10,100,1000,10000,就是除了最高位是1,其他都是0,或者說只有乙個1.3.當我還在為我能想到第二個方法而沾沾自喜的時候,我看到了下...

判斷乙個正整數是否素數

素數指的是只能被1和自身整除的大於1的整數 對於每個數num,並不需要從2判斷到num 1,這樣效率很低。假若乙個數可以進行因式分解,那麼分解得到的兩個數必將有乙個小於等於sqrt num 另乙個大於等於sqrt num 所以,我們只要遍歷sqrt num 即可,因為在sqrt num 左側找不到約...

將乙個正整數L隨機拆分成n個正整數

隨機指定範圍內n個不重複的數 最簡單最基本的方法 param min 指定範圍最小值 param max 指定範圍最大值 param n 隨機數個數 public static int randomcommon int min,int max,int n int result new int n i...