Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Evil Number และ Odious Number ใน C++

นิยาม

  • Evil Number: จำนวนบวกที่มีจำนวนบิต 1 ในรูปแบบไบนารีเป็น เลขคู่ (เช่น 5=101₂, 17=10001₂)
  • Odious Number: จำนวนบวกที่มีจำนวนบิต 1 ในรูปแบบไบนารีเป็น เลขคี่ (เช่น 4=100₂, 6=110₂)

ตัวอย่าง

Input: N = 65

Output: Evil Number

อธิบาย: 65 = 1000001₂ (มี 1 สองตัว -> คู่)

แนวทางแก้ปัญหา

นับจำนวนบิต 1 (Population Count / Hamming Weight) ในตัวเลข:

  • วนลูปหาร 2 เก็บเศษ นับจำนวนครั้งที่เศษ = 1
  • หรือใช้ Built-in: __builtin_popcount(n) (GCC/Clang)

โปรแกรมตัวอย่าง

#include <iostream>
using namespace std;

int isEvilNumber(int n) {
    int count = 0;
    while (n != 0) { if (n % 2 == 1) count++; n /= 2; }
    return (count % 2 == 0) ? 1 : 0;
}

int main() {
    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