Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับตัวเลขในช่วงที่หารด้วยตัวเลขที่ไม่ใช่ศูนย์ทั้งหมดใน C++


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