เรามีหมายเลข 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