判斷乙個正整數是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...