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