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

นับจำนวนมีทั้งหมด 1s ร่วมกันในการแทนไบนารีใน C ++


เราได้รับจำนวนเต็มบวก N เป้าหมายคือการนับตัวเลขที่น้อยกว่าหรือเท่ากับ N ที่มี 1 ทั้งหมดในการแทนค่าไบนารี ตัวอย่างเช่น 1 คือ 1, 3 คือ 11, 7 คือ 111, 15 คือ 1111... เป็นต้น

ถ้าเราเห็นตัวเลข แสดงว่าทั้งหมดเป็น 2i-1 โดยเริ่มจาก 1. ให้ตรวจสอบตัวเลขดังกล่าวให้น้อยกว่า n เราจะเปรียบเทียบว่า 2i-1<=n. แล้วนับเพิ่ม

มาทำความเข้าใจกับตัวอย่างกัน

ป้อนข้อมูล − N=15

ผลผลิต − จำนวนที่มี 1 ทั้งหมดเป็นเลขฐานสอง :4

คำอธิบาย − ตัวเลขเป็นผลรวมของจำนวนเฉพาะเดียวกัน − ตัวเลขจะเป็น 1 3 7 15

ป้อนข้อมูล − N=50

ผลผลิต − จำนวนที่มี 1 ทั้งหมดเป็นเลขฐานสอง :5

คำอธิบาย − ตัวเลขเป็นผลรวมของจำนวนเฉพาะเดียวกัน −

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราหาจำนวนเต็มบวก N..

  • ฟังก์ชัน allOnes(int n) รับ n เป็นอินพุตและส่งกลับตัวเลขที่มี 1 ทั้งหมดในรูปแบบไบนารี

  • ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับตัวเลขดังกล่าว..

  • ข้ามจาก i=1 ไปยัง i<=n โดยใช้ for loop.

  • สำหรับแต่ละ i ถ้า pow(2,i)-1 น้อยกว่าหรือเท่ากับ n จำนวนที่เพิ่มขึ้น

  • คืนค่าการนับเป็นผลเมื่อสิ้นสุดลูป for

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int allOnes(int n){
   int count = 0;
   for(int i=1;i<=n;i++){
      if(n>=pow(2,i)-1){
         count++;
         //cout<<" "<<pow(2,i)-1;
      }
   }
   return count;
}
int main(){
   int N=23;
   cout <<endl<< "Number having all 1's in binary : "<<allOnes(N);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Number having all 1's in binary : 4