C++ kiểm tra xem số có phải là lũy thừa của 2 không

Đầu tiên, chúng tôi cung cấp một ví dụ để giải thích vấn đề. Sau đó, chúng tôi đã đưa ra ba cách tiếp cận khác nhau để giải quyết vấn đề này. Cuối cùng, chúng tôi đã xem qua các cách triển khai của chúng, với mỗi cách tiếp cận có độ phức tạp về thời gian tốt hơn cách trước

tác giả dưới cùng

Nếu bạn có một vài năm kinh nghiệm trong Khoa học máy tính hoặc nghiên cứu và bạn muốn chia sẻ kinh nghiệm đó với cộng đồng, hãy xem Nguyên tắc đóng góp của chúng tôi

  • Viết chương trình trong C để tìm xem một số có phải là lũy thừa của hai hay không trên một dòng
  • Cách tìm xem một số có phải là lũy thừa của hai hay không

  • Bất kỳ số nào là lũy thừa của hai (hãy để nó là AND) chỉ có một bit được đặt trong biểu diễn nhị phân của nó.
    Ví dụ. 4 = 100, 8 = 1000, 16 = 10000, 32 = 100000, v.v.
  • Nếu chúng ta trừ 1 từ bất kỳ lũy thừa nào của 2 số thì bit thiết lập sẽ không được đặt và tất cả các bit ở bên phải của bit được đặt ban đầu trở thành 1.
    Ví dụ. 4-1 = 011, 8-1 = 0111, 16-1 = 01111, 32-1=011111
  • Bây giờ, nếu theo chiều bit và(&) của N và N-1 trả về ) có nghĩa là N là lũy thừa của 2.
    Ví dụ: 4 & 3 = 100 & 011 = 000

Chương trình C để kiểm tra xem một số có phải là lũy thừa của hai hay không bằng toán tử bitwise

#include
#include

int main() {
    int num;
    
    printf("Enter an integer\n");
    scanf("%d", &num);
    
    if(num && ((num & (num-1)) == 0)){
        printf("%d is power of 2", num);
    } else {
        printf("%d is not a power of 2", num);
    }

    return 0;
}

Đầu ra
Enter an integer
16
16 is power of 2
Enter an integer
15
16 is not a power of 2

Trong chương trình này, chúng ta sẽ đọc một số nguyên và kiểm tra xem số đó có phải là lũy thừa của hai (2) hay không. Ví dụ số 12 là lũy thừa của 2 vì nó là bội số của 2

Nguyên lý thực hiện chương trình này - Chia một số cho 2 cho đến khi số không bằng 1, nếu trong vòng lặp số dư không bằng 0 thì số không phải là lũy thừa của 2 ngược lại số là lũy thừa của 2

Kiểm tra sức mạnh của hai (2) bằng chương trình C

/*C program to check number is power or 2 or not.*/
 
#include 
 
int main()
{
    int num;
    int tempNum,flag;
     
    printf("Enter an integer number: ");
    scanf("%d",&num);
     
    tempNum=num;
    flag=0;
    /*check power of two*/
    while(tempNum!=1)
    {
        if(tempNum%2!=0){
            flag=1;
            break;
        }
        tempNum=tempNum/2;
    }
  
    if(flag==0)
        printf("%d is a number that is the power of 2.",num);
    else
        printf("%d is not the power of 2.",num);
      
    return 0;
}

Sử dụng chức năng xác định người dùng

/*C program to check number is power or 2 or not.*/
 
#include 
 
/*function definition*/
int isPowerOf2(int number)
{
    while(number!=1)
    {
        if(number%2!=0)
            return 0;
        number=number/2;
    }
    return 1;
}
 
int main()
{
    int num;
    printf("Enter an integer number: ");
    scanf("%d",&num);
 
    if(isPowerOf2(num))
        printf("%d is a number that is the power of 2.",num);
    else
        printf("%d is not the power of 2.",num);
     
    return 0;
}

đầu ra

First Run:
Enter an integer number: 32
32 is a number that is the power of 2.

Second Run:
Enter an integer number: 36
36 is not the power of 2.

Chương trình thao tác số C »


Chương trình C để tìm xem một không có phải là sức mạnh của hai

Cải thiện bài viết

Lưu bài viết

Thích bài viết

  • Cập nhật lần cuối. 19 tháng 7 năm 2021

  • Đọc
  • Bàn luận
  • khóa học
  • Luyện tập
  • Băng hình
  • Cải thiện bài viết

    Lưu bài viết

    Cho một số nguyên dương, viết hàm tìm xem đó có phải là lũy thừa của 2 hay không.
    Ví dụ.
     

    Input : n = 4
    Output : Yes
    22 = 4
    
    Input : n = 7
    Output : No
    
    Input : n = 32
    Output : Yes
    25 = 32

    1. Một phương pháp đơn giản cho việc này là chỉ cần lấy nhật ký của số trên cơ số 2 và nếu bạn nhận được một số nguyên thì số đó là lũy thừa của 2.
     

    C




    Enter an integer
    16
    16 is power of 2
    
    28

    Enter an integer
    16
    16 is power of 2
    
    29

    Enter an integer
    16
    16 is power of 2
    
    30

    Enter an integer
    16
    16 is power of 2
    
    31

    Enter an integer
    16
    16 is power of 2
    
    32

     

    Enter an integer
    16
    16 is power of 2
    
    33

    ________ 70 ________ 71 ________ 72 ________ 73

    No
    Yes
    4

    No
    Yes
    5
    No
    Yes
    6
    No
    Yes
    7_______78
    No
    Yes
    9
    No
    Yes
    0
    No
    Yes
    1

    No
    Yes
    2

     

    No
    Yes
    3

    No
    Yes
    2
    No
    Yes
    5

    No
    Yes
    4

    No
    Yes
    5
    No
    Yes
    8
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    1
    No
    Yes
    2
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    5
    No
    Yes
    6

    No
    Yes
    5
    No
    Yes
    8
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    1
    No
    Yes
    2
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    5
    No
    Yes
    6

    No
    Yes
    5
    No
    Yes
    6
    Enter an integer
    16
    16 is power of 2
    
    289

    No
    Yes
    2

     

    Enter an integer
    16
    16 is power of 2
    
    291

    đầu ra.

    No
    Yes

     

    Thời gian phức tạp. O(log2n)

    Không gian phụ trợ. Ô(1)

    2. Một giải pháp khác là tiếp tục chia số cho hai, tôi. e, làm n = n/2 lặp đi lặp lại. Trong bất kỳ lần lặp nào, nếu n%2 trở thành khác 0 và n không phải là 1 thì n không phải là lũy thừa của 2. Nếu n trở thành 1 thì đó là lũy thừa của 2.
     

    C




    Enter an integer
    16
    16 is power of 2
    
    31

    Enter an integer
    16
    16 is power of 2
    
    32

     

    Enter an integer
    16
    16 is power of 2
    
    33

    ________ 70 ________ 71 ________ 72 ________ 73

    No
    Yes
    4

    No
    Yes
    5
    Enter an integer
    16
    16 is power of 2
    
    301
    Enter an integer
    16
    16 is power of 2
    
    302

    Enter an integer
    16
    16 is power of 2
    
    303
    No
    Yes
    6
    Enter an integer
    16
    16 is power of 2
    
    289

    No
    Yes
    5
    Enter an integer
    16
    16 is power of 2
    
    307
    Enter an integer
    16
    16 is power of 2
    
    308

    Enter an integer
    16
    16 is power of 2
    
    303
    Enter an integer
    16
    16 is power of 2
    
    301
    Enter an integer
    16
    16 is power of 2
    
    311

    Enter an integer
    16
    16 is power of 2
    
    312
    No
    Yes
    6
    Enter an integer
    16
    16 is power of 2
    
    289

    Enter an integer
    16
    16 is power of 2
    
    303
    Enter an integer
    16
    16 is power of 2
    
    316

    No
    Yes
    5
    No
    Yes
    2

    No
    Yes
    5
    No
    Yes
    6
    Enter an integer
    16
    16 is power of 2
    
    321

    No
    Yes
    2

     

    Enter an integer
    16
    16 is power of 2
    
    323

    No
    Yes
    2
    No
    Yes
    5

    No
    Yes
    4

    No
    Yes
    5
    No
    Yes
    8
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    1
    No
    Yes
    2
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    5
    No
    Yes
    6

    No
    Yes
    5
    No
    Yes
    8
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    1
    No
    Yes
    2
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    5
    No
    Yes
    6

    No
    Yes
    5
    No
    Yes
    6
    Enter an integer
    16
    16 is power of 2
    
    289

    No
    Yes
    2

    đầu ra.

    No
    Yes

     

    3. Tất cả lũy thừa của hai số chỉ có một bit được đặt. Vì vậy, đếm số không. của các bit đã đặt và nếu bạn nhận được 1 thì số đó là lũy thừa của 2. Vui lòng xem Đếm bit tập hợp trong một số nguyên để đếm bit tập hợp.
    4. Nếu chúng ta trừ lũy thừa của 2 số cho 1 thì tất cả các bit không được đặt sau bit được đặt duy nhất sẽ trở thành được đặt; .
    Ví dụ đối với 4 ( 100) và 16(10000), chúng ta nhận được kết quả sau khi trừ đi 1 
    3 –> 011 
    . Chúng ta có thể nói n là lũy thừa của 2 hay không dựa trên giá trị của n&(n-1). Biểu thức n&(n-1) sẽ không hoạt động khi n bằng 0. Để xử lý trường hợp này, biểu thức của chúng ta sẽ trở thành n& (. n&(n-1)) (nhờ https. //www. chuyên viên máy tính. org/program-to-find-whether-a-no-is-power-of-two/Mohammad để thêm trường hợp này).
    So, if a number n is a power of 2 then bitwise & of n and n-1 will be zero. We can say n is a power of 2 or not based on value of n&(n-1). The expression n&(n-1) will not work when n is 0. To handle this case also, our expression will become n& (!n&(n-1)) (thanks to https://www.geeksforgeeks.org/program-to-find-whether-a-no-is-power-of-two/Mohammad for adding this case). 
    Dưới đây là cách triển khai phương thức này.
     

    C




    Enter an integer
    16
    16 is power of 2
    
    32

    No
    Yes
    12

     

    Enter an integer
    16
    16 is power of 2
    
    33

    ________ 70 ________ 71 ________ 72 ________ 717

    No
    Yes
    4

    No
    Yes
    5
    No
    Yes
    20

    No
    Yes
    5
    No
    Yes
    6
    No
    Yes
    23

    No
    Yes
    2

     

    Enter an integer
    16
    16 is power of 2
    
    323

    No
    Yes
    2
    No
    Yes
    5

    No
    Yes
    4

    No
    Yes
    5
    No
    Yes
    8
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    1
    No
    Yes
    2
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    5
    No
    Yes
    6

    No
    Yes
    5
    No
    Yes
    8
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    1
    No
    Yes
    2
    No
    Yes
    9
    No
    Yes
    7
    No
    Yes
    5
    No
    Yes
    6

    No
    Yes
    5
    No
    Yes
    6
    Enter an integer
    16
    16 is power of 2
    
    289

    No
    Yes
    2

    đầu ra.

    No
    Yes

     

    Vui lòng tham khảo toàn bộ bài viết về Chương trình để tìm hiểu xem một không có phải là lũy thừa của hai hay không để biết thêm chi tiết.
     


    Ghi chú cá nhân của tôi arrow_drop_up

    Tiết kiệm

    Vui lòng Đăng nhập để nhận xét.

    Làm thế nào để có được sức mạnh của 2 trong C?

    pow() là hàm lấy lũy thừa của một số, nhưng chúng ta phải sử dụng #include

    Làm cách nào để kiểm tra xem số có phải là lũy thừa của 3 trong C không?

    Phương pháp đệ quy. Kiểm tra xem số đó có chia hết cho 3 không, nếu có thì tiếp tục kiểm tra tương tự cho số/3 theo cách đệ quy . Nếu số có thể giảm đi 1 thì số đó chia hết cho 3 nếu không.