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?

7 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);
    }

  2. Bài này có thể làm theo đệ qui được đó bạn.

    #include
    using namespace std;
    int k=0;
    int logarit(long num)
    {
    if(num == 1) //nếu số N = 1 –> k=0
    return k;
    else
    if(num % 2 != 0 || num <= 0) // nếu N ko chia hết cho 2 hoặc N nhỏ hơn 1. Dừng và đưa ra kết quả
    return -1;
    else
    {
    k += 1; // tăng k lên 1 đơn vị
    return logarit(num / 2); // nếu N vẫn chia hết cho 2, tiếp tục với số n/2
    }
    }
    int main()
    {
    long n, temp;
    cout <> n;
    temp = logarit(n);
    if(temp == -1 )
    cout << "Không phải ! ";
    else
    cout << "Ta có " << n << " = 2 ^ " << temp;
    return 1;
    }

  3. Bài này có thể làm theo đệ qui được đó bạn.

    #include
    using namespace std;
    int k=0;
    int logarit(long num)
    {
    if(num == 1) //nếu số N = 1 –> k=0
    return k;
    else
    if(num % 2 != 0 || num <= 0) // nếu N ko chia hết cho 2 hoặc N nhỏ hơn 1. Dừng và đưa ra kết quả
    return -1;
    else
    {
    k += 1; // tăng k lên 1 đơn vị
    return logarit(num / 2); // nếu N vẫn chia hết cho 2, tiếp tục với số n/2
    }
    }
    int main()
    {
    long n, temp;
    cout <> n;
    temp = logarit(n);
    if(temp == -1 )
    cout << "Không phải ! ";
    else
    cout << "Ta có " << n << " = 2 ^ " << k;
    return 1;
    }

Leave a Reply to Dazzle Cancel reply