Saturday 10, May 2025
BÀI MỚI NHẤT
Friday, August 5, 2016

f Kiểm tra số n có dạng 2^k không

Đinh Quang Trưởng - Lập trình C/C++

Đề bài:
Kiểm tra số nguyên 4 byte có dạng 2^k hay không?

de bai
Dưới đây là đoạn code tham khảo:

*Lưu ý trong chương trình thay vì trả về  giá trị 1, 0. Mình quyết định nâng cấp bài toán là tìm các số dạng 2^k trong khoảng [0,10000]


#include<iostream>
#include <conio.h>
using namespace std;


int  check(int n);
int main()
{
int i;
int max = 10000;

cout << "cac so co dang 2^k trong khoang [0," << max << "]:\n";
for (i = 0; i < 10000; i++)
check(i) ? cout<<i : cout<<" ";
system("pause");
}
/* Số có dạng 2^k
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16

VD: kiểm tra số 81
16 % 2 = 8 dư 0
8 % 2 = 4 dư 0
4 % 2 = 2 dư 0
2 % 2 = 1 dư 0 => hết

VD: kiểm tra số 12
12 % 2 = 6 dư 0
6 % 2 = 3 dư 0
3 % 2 = 1 dư 1 => sai !
*/
int check(int n)//hàm kiểm tra số dang 2^k
{
int flag = 1;
n = n < 0 ? -n : n;
if (n < 2)
return 1;
/*while(n > 1)
{
if(n % 2)
return 0;
n /= 2;
}
return 1;*/
while (n > 1)
{
int du = n % 2;
if (du != 0)  // nếu dư mà khác 0. lập tức báo sai
flag = 0;
n /= 2;
}
if (flag == 1)
return 1;
else
return 0;
}
Kết quả khi chạy chương trình
ket qua
kêt quả thiếu mất con số 8192 (do ko đủ màn hình).

>>Có thể bạn quan tâm: Kiểm tra số n có dạng 3^k không?

Theo: Đinh Quang Trưởng