ได้รับจำนวนเต็ม N เป็นอินพุต เป้าหมายคือการหาจำนวนจำนวนเต็มที่น้อยกว่า N และแสดงในรูปแบบฐานสอง (binary) ตัวอย่างเช่น หาก N = 12 จำนวนที่น้อยกว่า 12 และเป็นเลขฐานสองคือ 1, 10, 11 รวม 3 จำนวน
ตัวอย่าง
Input
N=100
Output
Count of Binary Digit numbers smaller than N are: 4
Explanation
The Binary numbers less than 100 are: 1, 10, 11, 100
Input
N=120
Output
Count of Binary Digit numbers smaller than N are: 7
Explanation
The Binary numbers less than 100 are: 1, 10, 11, 100, 101, 110, 111
วิธีการที่ใช้ในโปรแกรม
วิธีนี้ใช้เวกเตอร์จำนวนเต็ม vec เริ่มต้นเพิ่ม 1 เข้าไป ในการสร้างเลขฐานสองตัวถัดไป จะนำตัวเลขสุดท้าย (temp) จาก vec (เริ่มต้นเป็น 1) แล้วสร้างตัวถัดไปโดย temp*10 และ temp*10+1 เนื่องจากเลขฐานสองจะเป็นลำดับ (1, 10, 11, 100, 110, 111...) นำตัวเลขออกจาก vec และถ้าน้อยกว่าหรือเท่ากับ N ให้เพิ่มจำนวนนับ
- รับจำนวนเต็ม N เป็นอินพุต
- ฟังก์ชัน
Smaller_N(int N)รับ N คืนค่าจำนวนเลขฐานสองที่น้อยกว่า N - กำหนดจำนวนนับเริ่มต้นเป็น 0
- สร้างเวกเตอร์
vecสำหรับเก็บจำนวนเต็มที่ประกอบด้วย 0 และ 1 เท่านั้น - เพิ่ม 1 เข้าไปในเวกเตอร์ด้วย
vec.push_back(1) - ใช้ while loop วนลูปผ่าน
vecนำตัวสุดท้ายออกมาเป็นtemp = vec.back()แล้วลบออกจากvec - ถ้า
temp <= Nให้เพิ่มจำนวนนับ และสร้างเลขฐานสองต่อไปtemp*10และtemp*10+1เพิ่มเข้าvec - เมื่อลูปสิ้นสุด คืนค่า count เป็นผลลัพธ์
ตัวอย่างโค้ด
#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;
}
Output
หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้:
Count of Binary Digit numbers smaller than N are: 8