เราได้รับช่วงที่มีจุดเริ่มต้นและจุดสิ้นสุด และภารกิจคือการคำนวณการนับเลขฐานสิบหกหรือตัวอักษรที่มีอยู่ในช่วงที่กำหนด
ตัวอักษรฐานสิบหกคืออะไร
ในแง่คอมพิวเตอร์ เลขฐานสิบหกคือตัวเลขที่มีฐาน 16 ซึ่งหมายความว่าเลขฐานสองสามารถแสดงเป็น 16 บิตได้ ประกอบด้วยตัวเลขจำนวนเต็มตั้งแต่ 0-15 โดยที่ 10 แสดงเป็น A, 11 เป็น B, 12 เป็น C, 13 เป็น D, 14 เป็น E และ 15 เป็น F.
ดังนั้น ในโปรแกรมด้านล่าง งานของเราคือค้นหาว่าช่วงประกอบด้วยเลขฐานสิบหกหรือไม่
ตัวอย่าง
Input − start = 10, End = 13 Output − 4
คำอธิบาย − มีเลขฐานสิบหก 4 ตัวระหว่าง 10 ถึง 13 เช่น 10 คือ A, 11 คือ B, 12 คือ C และ 13 คือ D.
Input − start = 15, End = 16 Output − 1
คำอธิบาย − มีตัวอักษรฐานสิบหกเพียงตัวเดียว นั่นคือ 15 เนื่องจาก F และ 16 จะแสดงเป็น 10 ตามลำดับ
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ใส่ range โดยเริ่มจากตัวแปร เช่น start และ end
-
ประกาศการนับตัวแปรเพื่อเก็บการนับและเริ่มต้นด้วย 0
-
เริ่มวนซ้ำโดยให้ i เริ่ม และจนกว่า i น้อยกว่าหรือเท่ากับสิ้นสุด
-
ภายในลูป ตรวจสอบว่า i มากกว่าหรือเท่ากับ 10 หรือไม่ และ i มากกว่าหรือเท่ากับ 15 แล้วจึงเพิ่มจำนวนขึ้น 1
-
มิฉะนั้น ตรวจสอบว่า i มากกว่า 15
-
จากนั้นตั้งค่าตัวแปรชั่วคราว temp ด้วยค่า i และเคลื่อนที่ในขณะที่ k ไม่เท่ากับ 0
-
และตรวจสอบว่า k%16 มากกว่าหรือเท่ากับ 10
-
เพิ่มจำนวนขึ้น 1
-
และ , ตั้งค่าอุณหภูมิโดย temp/16
-
ส่งคืนค่าจำนวน
-
พิมพ์ผลลัพธ์ .
ตัวอย่าง
#include <iostream>
using namespace std;
// Function to count the
// total number hexadecimal alphabet
int counthexa(int start, int end){
int result = 0;
for (int i = start; i <= end; i++){
// All hexadecimal alphabets
// from 10 to 15
if (i >= 10 && i <= 15){
result++;
}
// If i > 15 then perform mod by 16 repeatedly
// till the number is > 0
// If number % 16 > 10 then increase count
else if (i > 15){
int k = i;
while (k != 0){
if (k % 16 >= 10){
result++;
}
k = k / 16;
}
}
}
return result;
}
// Main Function
int main(){
int start = 10, end = 60;
cout << "count is: "<<counthexa(start, end);
return 0;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
count is: 21