กำหนดจำนวนเต็ม 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