เรามีหมายเลข START และ END ให้สองตัวเพื่อกำหนดช่วงของตัวเลข เป้าหมายคือการหาตัวเลขทั้งหมดในช่วง [START,END] ที่หารด้วยตัวเลขที่ไม่ใช่ศูนย์ทั้งหมดลงตัว เราจะทำสิ่งนี้โดยข้ามผ่านตัวเลขจาก START ถึง END และสำหรับแต่ละตัวเลข เราจะตรวจสอบว่าตัวเลขนั้นหารด้วยตัวเลขที่ไม่ใช่ศูนย์ทั้งหมดได้หรือไม่โดยใช้ลูป while ถ้าใช่ ให้นับเพิ่ม
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
START=10 END=20
ผลผลิต
Numbers that are divisible by all its non-zero digits: 14
คำอธิบาย
Numbers 10, 11, 12, 15, 20 are divisible by all their non-zero digits.
ป้อนข้อมูล
START=100 END=200
ผลผลิต
Numbers that are divisible by all its non-zero digits: 25
คำอธิบาย
This is list of numbers divisible by all non-zero digits : 100 101 102 104 105 110 111 112 115 120 122 124 126 128 132 135 140 144 150 155 162 168 175 184 200
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้จำนวนเต็ม START และ END เป็นตัวแปรช่วง
-
ฟังก์ชัน divisiblebyDigits(int start, int end) รับตัวแปรช่วงและส่งกลับจำนวนตัวเลขที่หารด้วยตัวเลขที่ไม่ใช่ศูนย์ทั้งหมดได้
-
ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับตัวเลขดังกล่าว
-
ใช้แฟล็กตัวแปรเป็น 0
-
ข้ามช่วงของตัวเลขโดยใช้การวนซ้ำ i=start to i=end
-
ตอนนี้สำหรับแต่ละตัวเลข num=i ใช้ while loop ตรวจสอบว่าตัวเลขเป็น>0
-
คำนวณหลัก=จำนวน%10. ถ้า digit>0 และ i%digit==0 set flag=1. อื่น flag=0 และแตก ลด num=num/10 เพื่อตรวจหลักถัดไป
-
หากตัวเลขที่ไม่ใช่ศูนย์ทั้งหมดหาร i ทั้งหมด แฟล็กคือ 1 จำนวนที่เพิ่มขึ้น
-
ในตอนท้ายของการนับลูปทั้งหมดจะมีจำนวนรวมที่หารด้วยตัวเลขที่ไม่ใช่ศูนย์
-
คืนค่าการนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int divisiblebyDigits(int start, int end){ int count = 0; int flag=0; for (int i = start; i <= end; i++){ int num=i; while(num>0){ int digit=num%10; if(digit>0){ if(i%digit==0) { flag=1; } //set flag else{ flag=0; //un-set flag break; } } num=num/10; } if(flag==1) //divisible by all non-zero digits { count++; //cout<<i<<" "; } } return count; } int main(){ int START = 10, END = 50; cout <<"Numbers that are divisible by all its non-zero digits: "<< divisiblebyDigits(START,END); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Numbers that are divisible by all its non-zero digits: 14