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

การนับตัวเลขจากช่วง[L, R] ซึ่งผลรวมของหลักคือ Y ใน C++


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