เรามีหมายเลข START และ END ให้สองตัวเพื่อกำหนดช่วงของตัวเลข เป้าหมายคือการหาตัวเลขทั้งหมดในช่วง [START,END] ซึ่งมีผลรวมของตัวเลขเท่ากับตัวเลข Y ที่กำหนด
เราจะทำสิ่งนี้โดยข้ามผ่านตัวเลขจาก START ถึง END และสำหรับแต่ละตัวเลข เราจะนับผลรวมของตัวเลขโดยใช้ลูป while หากผลรวมนี้เท่ากับ Y ให้นับการเพิ่มขึ้น
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
START=10 END=20 Y=4
ผลผลิต
Numbers such that digit sum is equal to Y: 1
คำอธิบาย
Number 13 has digit sum equal to 4.
ป้อนข้อมูล
START=10 END=50 Y=5
ผลผลิต
Numbers such that digit sum is equal to Y: 5
คำอธิบาย
Numbers 14, 23, 32, 41 and 50 have digit sum 5.
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้จำนวนเต็ม START, END, Y.
-
ฟังก์ชัน digitSum(int start, int end, int y) คืนค่าจำนวนตัวเลขด้วย digitsum=y
-
ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับตัวเลขดังกล่าว
-
ใช้ digsum ตัวแปรเป็น 0
-
ข้ามช่วงของตัวเลขโดยใช้การวนซ้ำ i=start to i=end
-
ตอนนี้สำหรับแต่ละตัวเลข num=i ใช้ while loop ตรวจสอบว่าตัวเลขเป็น>0
-
คำนวณ digsum+=num%10 ลด num=num/10 เพื่อเพิ่มหลักถัดไป
-
ในตอนท้ายของในขณะที่ตรวจสอบว่า ( digsum ==d ) ถ้านับเพิ่มจริง
-
เมื่อสิ้นสุดการวนซ้ำทั้งหมดจะมีจำนวนรวมที่ตรงตามเงื่อนไข
-
คืนค่าการนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int digitSum(int start, int end, int y){
int count = 0;
int digsum = 0;
for (int i = start; i <= end; i++){
int num=i;
digsum=0;
while(num>0){
digsum+=num%10; //sum of digits
num=num/10;
}
if(digsum==y) //original number is i{
count++;
//cout<<i<<" ";
}
}
return count;
}
int main(){
int START = 100;
int END = 1000;
int Y = 5;
cout <<"Numbers such that digit sum is equal to Y: "<<digitSum(START,END,Y);
return 0;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Numbers such that digit sum is equal to Y: 15