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

นับจำนวนที่มีความแตกต่างระหว่างตัวเลขและจำนวนหลักที่มากกว่าค่าที่ระบุใน C++


เรามีตัวเลขสองตัว N ซึ่งกำหนดช่วง [1,N] และ D ซึ่งเป็นส่วนต่าง เป้าหมายคือการหาตัวเลขทั้งหมดในช่วง [1,N] เพื่อให้ [ หมายเลข - (ผลรวมของตัวเลข) ]> D. เราจะทำสิ่งนี้โดยข้ามตัวเลขตั้งแต่ 1 ถึง N และสำหรับแต่ละตัวเลข เราจะคำนวณผลรวมหลักของมันโดยใช้ลูป while ตรวจสอบว่าตัวเลขและผลรวมหลักที่คำนวณมีความแตกต่างมากกว่า D หรือไม่

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

ป้อนข้อมูล

N=15 D=5

ผลผลิต

Numbers such that difference b/w no. and its digit sum greater than value D: 6

คำอธิบาย

Numbers 10, 11, 12, 13, 14, 15 satisfy the condition. ( 10-1, 11-2, 12-3, 13-4, 14-5, 15-6 ) all differences are 9 which is greater than 5.

ป้อนข้อมูล

N=20 D=10

ผลผลิต

Only 20 satisfies the condition. 20-2=18 > 10.

คำอธิบาย

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

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

  • เราใช้จำนวนเต็ม N และ D

  • ฟังก์ชัน digitSum(int n, int d) รับตัวแปร N, D และคืนค่าการนับจำนวนด้วย (num-digitsum)>d.

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

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

  • ข้ามช่วงของตัวเลขโดยใช้การวนซ้ำ i=1 ถึง i=n

  • ตอนนี้สำหรับแต่ละตัวเลข num=i ใช้ while loop ตรวจสอบว่าตัวเลขเป็น>0

  • คำนวณ digsum+=num%10 ลด num=num/10 เพื่อเพิ่มหลักถัดไป

  • ในตอนท้ายของในขณะที่ตรวจสอบว่า ( i - digsum> d ) ถ้านับเพิ่มจริง

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

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

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int digitSum(int n, int d){
   int count = 0;
   int digsum = 0;
   for (int i = 1; i <= n; i++){
      int num=i;
      digsum=0;
      while(num>0){
         digsum+=num%10; //sum of digits
         num=num/10;
      }
      if(i-digsum>d) //original number is i {
         count++;
         //cout<<i<<" ";
      }
   }
   return count;
}
int main(){
   int N = 20;
   int D = 8;
   cout <<"Numbers such that difference between number and its digit sum greater than specific value: "<<digitSum(N,D);
   return 0;
}

ผลลัพธ์

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

Numbers such that difference between number and its digit sum greater than specific value: 11