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

ตรวจสอบว่าตัวเลขเป็น Bleak ใน C++ . หรือไม่


ที่นี่เราจะดูว่าตัวเลขเป็น Bleak หรือไม่ มีการกล่าวกันว่าตัวเลขจะเยือกเย็นหากไม่สามารถแสดงเป็นผลรวมของจำนวนบวก x และตั้งค่าการนับบิตใน x ได้ ดังนั้น x + set_bit_count(x) จึงไม่เท่ากับ n สำหรับจำนวนที่ไม่ใช่ค่าลบ x

แนวคิดนี้ง่ายมาก หากจำนวนบิตที่ตั้งไว้ + ตัวเลขไม่เหมือนกับตัวเลข แสดงว่าเป็น "เยือกเย็น" ไม่เช่นนั้นจะไม่ใช่

ตัวอย่าง

#include <iostream>
using namespace std;
int set_bit_count(int x) {
   unsigned int bit_count = 0;
   while (x != 0) {
      x &= (x - 1);
      bit_count++;
   }
   return bit_count;
}
bool isBleakNumber(int n) {
   for (int i = 1; i < n; i++)
   if (i + set_bit_count(i) == n)
      return false;
      return true;
}
int main() {
   isBleakNumber(3) ? cout << "Yes\n" : cout << "No\n";
   isBleakNumber(4) ? cout << "Yes\n" : cout << "No\n";
}

ผลลัพธ์

No
Yes