Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số giữa phạm vi chỉ có các chữ số khác không có tổng các chữ số là N và số chia hết cho M trong C ++

Chúng tôi được cung cấp hai số START và END để xác định một dải số. Mục tiêu là tìm tất cả các số trong dải [START, END] không có chữ số nào là 0 và có tổng các chữ số bằng một số N. các số chia hết cho M

Chúng ta sẽ thực hiện điều này bằng cách duyệt các số từ START đến END và đối với mỗi số, chúng ta sẽ đếm tổng các chữ số của nó bằng vòng lặp while (chỉ khi tất cả các chữ số đều khác 0). Nếu tổng này bằng N và số chia hết cho M, thì tính tăng dần.

Hãy cùng hiểu với các ví dụ.

Đầu vào

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

Đầu ra

Numbers with digit sum N and divisible by M: 4

Giải thích

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

Đầu vào

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

Đầu ra

Numbers with digit sum N and divisible by M: 4

Giải thích

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

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy các số nguyên START, END, N và M.

  • Hàm digitSum (int start, int end, int n, int m) trả về tổng số các số có chữ số có chữ số =n và chia hết cho m và có tất cả các chữ số khác không.

  • Lấy số lượng biến ban đầu là 0 cho những số như vậy.

  • Lấy digsum biến đổi là 0

  • Lấy cờ biến là 0.

  • Dải số theo chiều ngang bằng cách sử dụng vòng lặp for. i =start to i =end

  • Bây giờ đối với mỗi số num =i, nếu num% m ==0 (chia hết cho m) thì di chuyển tiếp.

  • sử dụng vòng lặp while kiểm tra xem số có> 0 hay không. Và tìm các chữ số.

  • chữ số =num% 10. Nếu chữ số khác 0, hãy tính digsum + =chữ số. Giảm num =num / 10 để thêm chữ số tiếp theo. Nếu bất kỳ chữ số nào là 0, hãy đặt cờ =0 và phá vỡ vòng lặp while

  • Vào cuối thời gian, hãy kiểm tra xem (digsum ==n và cờ ==1). Nếu số gia tăng đúng.

  • Bây giờ tăng i lên m (theo bội số của m).

  • Ở cuối tất cả các số vòng lặp sẽ có tổng số thỏa mãn điều kiện.

  • Trả lại kết quả là số lượng.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Numbers with digit sum N and divisible by M: 4