Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số n chữ số có tổng chữ số bằng tổng cho trước trong C++

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

Phạm vi: chữ số 1-100, tổng 1-500.

Hiểu qua ví dụ

Đầu vào: digits = 3, digi_sum = 3

Đầu ra: Số lượng số 3 chữ số tổng chữ số = 3: 6

Giải thích: Các số: 102, 111, 120, 201, 210, 300.

Đầu vào: digits = 4, digi_sum = 2

Đầu ra: Số lượng số 4 chữ số tổng chữ số = 2: 4

Giải thích: Các số: 1001, 1010, 1100, 2000.

Phương pháp sử dụng

Duyệt từ số d chữ số đầu tiên, tìm số đầu tiên có tổng chữ số = tổng cho trước. Tăng số lên 9 cho đến khi tổng chữ số > tổng cho trước. Khi tìm thấy số tổng chữ số lớn hơn, tăng 1 và tìm số tiếp theo có tổng = tổng cho trước. Lặp lại đến số d chữ số cuối cùng.

  • Nhập số chữ số và tổng chữ số.
  • Hàm digits_sum(int digits, int digi_sum) trả về đếm.
  • Khởi tạo count = 0.
  • Số đầu tiên: Left = pow(10, digits - 1). Số cuối: right = pow(10, digits) - 1.
  • Vòng lặp while từ Left đến right.
  • Tính tổng chữ số của i (biến last).
  • Nếu tổng = digi_sum tăng count, i += 9.
  • Ngược lại i++.
  • Trả về count.

Ví dụ mã nguồn

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

Chạy mã trên cho kết quả:

Kết quả

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