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

จำนวนเลขฐานสองที่น้อยกว่า N ใน C++


กำหนดจำนวนเต็ม N เป็นอินพุต เป้าหมายคือการหาจำนวนเต็มที่น้อยกว่า N และแสดงในรูปแบบไบนารี ตัวอย่างเช่น หากอินพุต N คือ 12 ตัวเลขที่น้อยกว่า 12 จะเป็น 1,10,11 ที่เป็นไบนารีและมี 0 และ 1 เป็นตัวเลข คำตอบก็คือ 3.

ตัวอย่าง

อินพุต

N=100

ผลลัพธ์

Count of Binary Digit numbers smaller than N are − 4

คำอธิบาย

The Binary numbers less than 100 are − 1, 10, 11, 100

อินพุต

N=120

ผลลัพธ์

Count of Binary Digit numbers smaller than N are: 7

คำอธิบาย

The Binary numbers less than 100 are : 1, 10, 11, 100, 101, 110, 111

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

ในวิธีนี้เราจะใช้เวกเตอร์จำนวนเต็ม vec สำหรับสิ่งนี้เราจะกด 1 ก่อน ตอนนี้เพื่อสร้างเลขฐานสองถัดไป เราจะแยกตัวเลขสุดท้าย (ชั่วคราว) จาก vec (เริ่มแรก 1) จากนั้นสร้างต่อไปโดยใช้:temp*10 และ temp*10+1 เป็นเลขฐานสองเสมอ ( 1,10,11,100,110,111….). ป๊อปตัวเลขจาก vec และหากน้อยกว่า N ให้นับเพิ่มขึ้น

  • ใช้จำนวนเต็ม N เป็นอินพุต

  • ฟังก์ชัน Smaller_N(int N) รับค่า N และคืนค่าจำนวนเลขฐานสองที่น้อยกว่า N

  • นับเริ่มต้นเป็น 0

  • ใช้ integer vector vec สำหรับเก็บจำนวนเต็มที่ประกอบด้วย 0s และ 1s เท่านั้น

  • เพิ่ม 1 ให้กับเวกเตอร์โดยใช้ vec.push_back(1).

  • ใช้ while วนซ้ำ สำรวจ vec[ ] และนำออกครั้งสุดท้ายที่ผลักเป็น temp=vec.back(). และลบออกจาก vec.

  • หาก temp<=N ให้เพิ่มจำนวนและสร้างจำนวนเต็มไบนารีถัดไปเป็น temp*10และ temp*10+1 และเพิ่มใน vec

  • เมื่อสิ้นสุด while ผลตอบแทนจะนับเป็นผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int Smaller_N(int N){
   int count = 0;
   vector<int> vec;
   vec.push_back(1);
   while (!vec.empty()){
      int temp = vec.back();
      vec.pop_back();
      if (temp <= N){
         count++;
         int temp_2 = temp * 10;
         vec.push_back(temp_2);
         vec.push_back(temp_2 + 1);
      }
   }
   return count;
}
int main(){
   int N = 1000;
   cout<<"Count of Binary Digit numbers smaller than N are: "<<Smaller_N(N);
   return 0;
}

ผลลัพธ์

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

Count of Binary Digit numbers smaller than N are: 8