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

การนับจำนวนระหว่างช่วงที่มีเฉพาะตัวเลขที่ไม่ใช่ศูนย์ซึ่งมีผลรวมของหลักเป็น N และตัวเลขหารด้วย M ใน C ++


เรามีหมายเลข START และ END ไว้สองตัวเพื่อกำหนดช่วงของตัวเลข เป้าหมายคือการหาตัวเลขทั้งหมดในช่วง [START,END] ซึ่งไม่มีตัวเลขเป็น 0 และมีผลรวมของตัวเลขเท่ากับหมายเลข N ที่กำหนดเช่นกัน ตัวเลขหารด้วย M

เราจะทำสิ่งนี้โดยข้ามผ่านตัวเลขจาก START ถึง END และสำหรับแต่ละตัวเลข เราจะนับผลรวมของตัวเลขโดยใช้ลูป while (เฉพาะในกรณีที่ตัวเลขทั้งหมดไม่ใช่ศูนย์) หากผลรวมนี้เท่ากับ N และตัวเลขหารด้วย M ลงตัว ให้นับการเพิ่มขึ้น

มาทำความเข้าใจกับตัวอย่างกัน

ป้อนข้อมูล

START=1 END=100 N=9 M=6

ผลผลิต

Numbers with digit sum N and divisible by M: 4

คำอธิบาย

Numbers 18, 36, 54, 72 have digit sum=9 and divisible by 6. None has 0 as a digit.

ป้อนข้อมูล

START=100 END=200 N=10 M=2

ผลผลิต

Numbers with digit sum N and divisible by M: 4

คำอธิบาย

Numbers 118, 136, 154, 172 have digit sum=10 and divisible by 2. None has 0 as a digit.

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราใช้จำนวนเต็ม START, END, N และ M.

  • ฟังก์ชัน digitSum(int start, int end, int n, int m) คืนค่าจำนวนตัวเลขที่มี digitsum=n และหารด้วย m ลงตัว และมีตัวเลขที่ไม่ใช่ศูนย์ทั้งหมด

  • ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับตัวเลขดังกล่าว

  • ใช้ digsum ตัวแปรเป็น 0

  • ใช้แฟล็กตัวแปรเป็น 0

  • ข้ามช่วงของตัวเลขโดยใช้การวนซ้ำ i=start to i=end

  • ตอนนี้สำหรับแต่ละตัวเลข num=i ถ้า num%m==0 ( หารด้วย m ลงตัว ) ให้เลื่อนไปข้างหน้า

  • ใช้ while loop ตรวจสอบว่าตัวเลขเป็น>0 หรือไม่ และค้นหาตัวเลข

  • หลัก=จำนวน%10. หากตัวเลขไม่เป็นศูนย์ ให้คำนวณ digsum+=digit ลด num=num/10 เพื่อเพิ่มหลักถัดไป หากตัวเลขใดเป็น 0 set flag=0 และทำลาย while loop

  • ในตอนท้ายของในขณะที่ตรวจสอบว่า ( digsum ==n และ flag==1 ) ถ้านับเพิ่มจริง

  • ตอนนี้ เพิ่มขึ้น i โดย m ( ในทวีคูณของ m )

  • เมื่อสิ้นสุดการวนซ้ำทั้งหมดจะมีจำนวนรวมที่ตรงตามเงื่อนไข

  • คืนค่าการนับเป็นผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int digitSum(int start, int end, int n, int m){
   int count = 0;
   int digsum = 0;
   int flag=0;
   for (int i = start; i <= end; i++){
      int num=i;
      digsum=0;
      flag=0;
      if(num%m==0){
         while(num>0){
            int digit=num%10;
            if(digit==0){
               flag=0;
               break;
            }
            digsum+=num%10; //sum of digits
            num=num/10;
            flag=1;
         }
         if(digsum==n && flag==1) //original number is i {
            count++;
            cout<<i<<" ";
         }
         i+=m; //now increment in multiples of m
         i--; // for loop has i++
      }
   }
   return count;
}
int main(){
   int START = 1;
   int END = 100;
   int N = 9;
   int M = 6;
   cout <<"Numbers with digit sum N and divisible by M: "<<digitSum(START,END,N, M);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Numbers with digit sum N and divisible by M: 4