ในปัญหานี้ เราได้รับอาร์เรย์ตัวเลข N หน้าที่ของเราคือตรวจสอบว่าตัวเลขนั้นเป็น เลขร้ายหรือเลขแปลก
เลขร้าย: เป็นจำนวนบวกซึ่งมีเลขคู่เท่ากับ 1 ในการขยายฐานสอง
ตัวอย่าง: 5, 17
จำนวนที่น่ารังเกียจ: เป็นจำนวนบวกที่มีเลข 1 เป็นเลขคี่ในการขยายไบนารี
ตัวอย่าง : 4, 6
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: ไม่มี =65
ผลลัพธ์: เลขร้าย
คำอธิบาย:
การขยายไบนารีของ 65 :1000001
แนวทางแก้ไข:
วิธีแก้ปัญหาง่ายๆ ก็คือการหาการขยายฐานสองของตัวเลขแล้วนับจำนวน 1 ในการขยาย หากการนับเป็นเลขคู่จะเป็นเลขชั่ว มิฉะนั้น จะเป็นเลขประหลาด
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#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;
} ผลลัพธ์ -
The number 2049 is an Evil Number