Kiểm tra số nguyên 4 byte có dạng 2^k không?

Yêu cầu:
Kiểm tra số nguyên N 4 byte có dạng 2^k không?

Giải thuật:
– Dùng vòng lặp tăng dần biến k, thực hiện p = p*2
– So sánh số nguyên N với p
+ Nếu N == p -> N có dạng 2^k
+ Nếu N < p -> N không có dang 2^k

Code

/************************************************************
* Author: VNCODING
* History
* 2016/12/14        first create    VNCODING
*************************************************************/

#include <stdio.h>
#include <conio.h>

int main()
{
	int n, k;
    unsigned int p = 1;
	do
	{
		printf("n = ");
		scanf("%d", &n);
	}while(n <= 0);
	
	for(k = 1; p < n; k++)
	{
        p *= 2;
	}

    if(p == n)
    {
        printf("%d is 2^%d format", n, k-1);
    }
    else
    {
        printf("%d is not 2^k format", n);
    }
	getch();
	return 0;
}

Kết quả:

Kiểm tra số nguyên có dạng 2 mũ k không?
Kiểm tra số nguyên có dạng 2 mũ k không?

5 Comments on Kiểm tra số nguyên 4 byte có dạng 2^k không?

  1. Bài này mình dùng công thức hàm log được ko?
    //Ktra 1 so co dang 2^k ?

    #include
    #include
    void Nhapx(int );
    void KT(int );

    void Nhapx(int *x)
    {
    do {
    printf(“Nhap x khong am”);
    scanf_s(“%d”,&(*x));
    } while (*x<0);
    }

    void KT(int a)
    {
    double b; int c;
    b=(log(a*1.0))/(log(2.0));
    c=floor(b);
    if (b-c==0)
    printf("%d co dang 2^k va k = %d",a,c);
    else
    printf("%d khong co dang 2^k",a);
    }

    void main ()
    {
    int x;
    Nhapx(&x);
    KT(x);
    }

Leave a Reply

Your email address will not be published.

*