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

Đếm số n chữ số có tổng các chữ số bằng tổng đã cho trong C ++

Cho một số dương là số chữ số và một tổng. Mục tiêu là tìm tất cả các số d chữ số có tổng các chữ số bằng tổng đầu vào. Các số có số 0 ở đầu sẽ không được coi là số d chữ số.

Phạm vi là các chữ số từ 1 đến 100 và tổng từ 1 đến 500.

Hãy cho chúng tôi hiểu với các ví dụ.

Ví dụ

Đầu vào - chữ số =3, digi_sum =3

Đầu ra - Đếm số có n chữ số mà tổng các chữ số bằng tổng đã cho là:6

Giải thích - Các số có ba chữ số có tổng các chữ số là 3 là:

102, 111, 120, 201, 210 và 300.

Đầu vào - chữ số =4 digi_sum =2

Đầu ra - Đếm số có n chữ số mà tổng các chữ số bằng tổng đã cho là:4

Giải thích - Các số có bốn chữ số có tổng các chữ số là 2 là:

1001, 1010, 1100 và 2000.

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

Trong cách tiếp cận này, chúng ta sẽ duyệt từ số d chữ số đầu tiên và tìm số đầu tiên có tổng các chữ số bằng tổng đã cho. Sau đó tăng các số lên 9 cho đến khi tìm được tổng các chữ số nhiều hơn tổng đã cho. Khi một số có tổng chữ số lớn hơn tổng đầu vào được tìm thấy thì hãy tăng số đó lên 1 và tìm số tiếp theo có tổng là tổng đầu vào. Lặp lại quá trình này cho đến số d chữ số cuối cùng.

  • Lấy số lượng chữ số và tổng các chữ số làm đầu vào.
  • Hàmumbers_sum (intumbers, int digi_sum) nhận cả hai giá trị đầu vào và trả về tổng số n chữ số có tổng các chữ số bằng một tổng cho trước.
  • Lấy số lượng ban đầu là 0.
  • Lấy số đầu tiên là Left =pow (10, chữ số - 1). Và số cuối cùng của phạm vi bên phải =pow (10, chữ số) - 1 (tức là 10 và 99 cho chữ số =2).
  • Sử dụng vòng lặp while theo chiều từ trái sang phải.
  • Lấy đầu tiên =0 và cuối cùng =i.
  • Đối với mỗi i (cuối cùng), lấy chữ số tận cùng bên phải (% 10 cuối cùng) và thêm vào đầu tiên. Giảm 10 lần cuối cho lần lặp tiếp theo.
  • Nếu lần đầu tiên trở thành bằng digi_sum thì hãy đếm số gia tăng và cập nhật i bằng 9 cho lần lặp tiếp theo.
  • Nếu không thì tăng i lên 1.
  • Ở cuối tất cả các vòng lặp, chúng tôi sẽ đếm là các số có tổng chữ số bằng digi_sum.
  • Kết quả là số lượt trả lại.

Ví dụ

#include <bits/stdc++.h>
using namespace std;

int digits_sum(int digits, int digi_sum) {
   int count = 0;
   int Left = pow(10, digits - 1);
   int right = pow(10, digits) - 1;
   int i = Left;
   while (i <= right) {
      int first = 0;
      int last = i;
      while (last != 0) {
         first = first + last % 10;
         last = last / 10;
      }
      if (first == digi_sum) {
         count++;
         i = i + 9;
      } else {
         i++;
      }
   }
   return count;
}
int main() {
   int digits = 5;
   int digi_sum = 7;
   cout << "Count of n digit numbers whose sum of digits equals to given sum are: " << digits_sum(digits, digi_sum);
   return 0;
}

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

Đầu ra

Count of n digit numbers whose sum of digits equals to given sum are: 5