Trong bài toán này, chúng ta được cung cấp cho một mảng một số N. Nhiệm vụ của chúng ta là kiểm tra xem số đó là Số xấu hay Số Odious.
Số Ác: Nó là một số dương có số chẵn là 1 trong phần mở rộng nhị phân của nó.
Ví dụ: 5, 17
Số Odious: Nó là một số dương có số lẻ là 1 trong phần mở rộng nhị phân của nó.
ví dụ: 4, 6
Hãy lấy một ví dụ để hiểu vấn đề,
Đầu vào: N =65
Đầu ra: Số ác
Giải thích:
Mở rộng nhị phân của 65:1000001
Phương pháp tiếp cận giải pháp:
Một giải pháp đơn giản cho vấn đề là bằng cách tìm khai triển nhị phân của số và sau đó đếm số 1 trong khai triển. Nếu số đếm là số chẵn thì số đó là số xấu nếu không thì đó là số Khủng.
Chương trình minh họa hoạt động của giải pháp của chúng tôi,
Ví dụ
#include <iostream> using namespace std; int isEvilNumber(int n) { int count = 0; while (n != 0) { int r = n % 2; if(r == 1) count++; n = n / 2; } if (count % 2 == 0) return 1; else return 0; } int main(void) { int num = 2049; if (isEvilNumber(num) ) cout<<"The number "<<num<<" is an Evil Number"; else cout<<"The number "<<num<<" is an Odious Number"; return 0; }
Đầu ra -
The number 2049 is an Evil Number