ได้รับช่วง [first, last] ต้องการนับจำนวนในช่วงนี้ที่มีหลักแรกและหลักสุดท้ายเหมือนกัน เช่น 232 (หลักแรก=2, หลักสุดท้าย=2)
ตัวอย่าง
อินพุต: first = 8, last = 40
เอาต์พุต: 5
คำอธิบาย: 8, 9, 11, 22, 33
อินพุต: first = 100, last = 200
เอาต์พุต: 10
คำอธิบาย: 101, 111, 121, 131, 141, 151, 161, 171, 181, 191
แนวทาง
- ฟังก์ชัน
getFirstDigit(int num): หาร 10 ซ้ำจนnum < 10คืนค่า num - ฟังก์ชัน
getCount(int fst, int lst): วนลูป i=fst..lst หาหลักแรกและหลักสุดท้าย (i%10) เปรียบเทียบ
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int getFirstDigit(int num) {
while (num >= 10) num = num / 10;
return num;
}
int getCount(int fst, int lst) {
int count = 0;
for (int i = fst; i <= lst; i++) {
int fdigit = getFirstDigit(i);
int ldigit = i % 10;
if (fdigit == ldigit) ++count;
}
return count;
}
int main() {
int first = 10, last = 23;
cout << "Numbers with same first and last digits: " << getCount(first, last);
return 0;
}
ผลลัพธ์
Numbers with same first and last digits: 2