เราได้ให้ตัวเลข N เป้าหมายคือการหาตัวเลขที่มี 0 เป็นหลักและอยู่ในช่วง [1,N].
เราจะทำได้โดยข้ามผ่านตัวเลขตั้งแต่ 10 ถึง N ( ไม่ต้องตรวจสอบจาก 1 ถึง 9 ) และสำหรับตัวเลขแต่ละตัว เราจะตรวจสอบแต่ละหลักโดยใช้ while loop หากพบว่ามีเลขใดเพิ่มขึ้นเป็นศูนย์ ให้เลื่อนไปที่เลขถัดไป มิฉะนั้น ให้ลดจำนวนลง 10 หลักเพื่อตรวจสอบตัวเลขจนเป็น>0
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
N=11
ผลผลิต
Numbers from 1 to N with 0 as digit: 1
คำอธิบาย
Starting from i=10 to i<=11 Only 10 has 0 as a digit. No need to check the range [1,9].
ป้อนข้อมูล
N=100
ผลผลิต
Numbers from 1 to N with 0 as digit: 10
คำอธิบาย
10, 20, 30, 40, 50, 60, 70, 80, 90, 100. Ten numbers have 0 as digits.
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราหาจำนวนเต็ม N.
-
ฟังก์ชัน haveZero(int n) รับ n เป็นพารามิเตอร์และส่งกลับจำนวนตัวเลขที่มี 0 เป็นตัวเลข
-
ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับตัวเลขดังกล่าว
-
ข้ามช่วงของตัวเลขโดยใช้การวนซ้ำ i=10 ถึง i=n
-
ตอนนี้สำหรับแต่ละตัวเลข num=i ใช้ while loop ตรวจสอบว่า num%10==0 ถ้าเท็จให้หาร num ด้วย 10 และเลื่อนไปที่หลักถัดไปจนถึง num>0
-
หากเป็น true ให้หยุดตรวจสอบเพิ่ม นับและแตกขณะวนซ้ำ
-
เมื่อสิ้นสุดการวนซ้ำทั้งหมด การนับจะมีตัวเลขทั้งหมดที่มี 0 เป็นตัวเลขระหว่าง 1 ถึง N
-
คืนค่าการนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int haveZero(int n){ int count = 0; for (int i = 1; i <= n; i++) { int num = i; while(num>1){ int digit=num%10; if (digit == 0){ count++; break; } else { num=num/10; } } } return count; } int main(){ int N = 200; cout <<"Numbers from 1 to N with 0 as digit: "<<haveZero(N); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Numbers from 1 to N with 0 as digit: 29