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

Đếm số trong khoảng [L, R] có tổng chữ số bằng Y trong C++


Cho hai số START và END xác định một khoảng số. Mục tiêu là tìm tất cả các số trong khoảng [START, END] có tổng chữ số bằng số Y cho trước.

Ta thực hiện bằng cách duyệt số từ START đến END và với mỗi số đếm tổng chữ số bằng vòng lặp while. Nếu tổng này bằng Y, tăng count.

Hãy hiểu qua các ví dụ.

Đầu vào

START=10 END=20 Y=4

Đầu ra

Số có tổng chữ số bằng Y: 1

Giải thích

Số 13 có tổng chữ số bằng 4.

Đầu vào

START=10 END=50 Y=5

Đầu ra

Số có tổng chữ số bằng Y: 5

Giải thích

Các số 14, 23, 32, 41 và 50 có tổng chữ số 5.

Phương pháp sử dụng trong chương trình dưới đây

  • Nhận số nguyên START, END, Y.
  • Hàm digitSum(int start, int end, int y) trả về số lượng số có tổng chữ số = y.
  • Khởi tạo biến count = 0 cho các số như vậy.
  • Biến digsum = 0.
  • Duyệt khoảng số bằng vòng lặp for. i=start đến i=end.
  • Với mỗi số num=i, dùng vòng lặp while kiểm tra số > 0.
  • Tính digsum += num%10. Giảm num = num/10 để lấy chữ số tiếp theo.
  • Sau while, kiểm tra nếu (digsum == y). Nếu đúng tăng count.
  • Sau tất cả vòng lặp count chứa tổng số thỏa mãn điều kiện.
  • Trả về count làm kết quả.

Ví 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; // tổng chữ số
            num = num / 10;
        }
        if(digsum == y) { // số gốc là i
            count++;
            // cout << i << " ";
        }
    }
    return count;
}

int main() {
    int START = 100;
    int END = 1000;
    int Y = 5;
    cout << "Số có tổng chữ số bằng Y: " << digitSum(START, END, Y);
    return 0;
}

Đầu ra

Nếu chạy mã trên sẽ cho kết quả sau:

Số có tổng chữ số bằng Y: 15