Tổng các chữ số của một số nguyên dương trong C++

Đây là bài 4/15 bài của series môn học TH Nhập môn lập trình

Sau khi đã tìm hiểu cách đếm số chữ số của một số nguyên dương trong C++, chúng ta có thể tính tổng các chữ số của một số nguyên dương trong C++. Các bước thực hiện như sau:

Bước 1 – Khai báo biến để lưu giá trị của số nguyên dương.
Bước 2 – Sử dụng vòng lặp để lấy từng chữ số của số nguyên đó.
Bước 3 – Trong mỗi lần lặp, ta lấy phần dư của phép chia số nguyên đó cho 10 để được chữ số cuối cùng của số đó.
Bước 4 – Cộng giá trị chữ số cuối cùng lấy được vào biến tổng.
Bước 5 – Sau đó, chia số đó cho 10 để xóa chữ số cuối cùng của số đó. Tiếp tục lặp lại cho đến khi số đó bằng 0.
Bước 6 – Cuối cùng, ta in ra tổng các chữ số đó.

Bài này sẽ hướng dẫn cách sử dụng vòng lặp while, for, và do…while để tính tổng các chữ số của một số nguyên dương trong C++.

1. Sử dụng vòng lặp while

Ở bài Đếm số chữ số của một số nguyên dương trong C++, vòng lặp while được sử dụng để đếm các chữ số của một số nguyên. Để tính tổng các chữ số thì chúng ta chỉ cần thêm dòng lệnh cộng từng chữ số duyệt qua được. Cùng xem chương trình C++ bên dưới:

#include <iostream>
using namespace std;

int main() {
    int n, sum=0;
    cout << "Nhap vao mot so nguyen: ";
    cin >> n;

    while(n != 0) {
        sum += n%10;
        n /= 10;
    }

    cout << "Tong cac chu so cua so nguyen la: " << sum << endl;
    return 0;
}

Biến n lưu giá trị số nguyên được nhập vào. Biến sum giúp tính tổng các chữ số của số nguyên n. Trong vòng lặp while, lệnh sum += n%10; giúp tính tổng các chữ số. Vòng lặp while dừng khi n==0, là tức là đã duyệt qua hết các chữ số của số nguyên ban đầu.

Lưu ý: Muốn kiểm tra người dùng nhập số nguyên dương hợp lệ hay không thì các bạn xem lại bài đếm số chữ số của một số nguyên dương trong C++.

2. Sử dụng vòng lặp for

Nếu không muốn sử dụng vòng lặp while, các bạn có thể dùng vòng lặp for để tính tổng các chữ số.

#include <iostream>
using namespace std;

int main() {
    int n, sum=0;
    cout << "Nhap vao mot so nguyen: ";
    cin >> n;

    for(int i=n; i>0; i/=10) {
        sum += i%10;
    }

    cout << "Tong cac chu so cua so nguyen la: " << sum << endl;
    return 0;
}

Trong vòng lặp for, giá trị khởi tạo của biến i=n. Sau đó, mỗi lần lặp sẽ gán lại i=i/10. Trong vòng lặp lệnh tính tổng sum += i%10; sẽ được thực thi. Vòng lặp for chỉ dừng khi i=0.

3. Sử dụng vòng lặp do…while

Nếu bạn sử dụng do...while để tính tổng các chữ số của một số nguyên thì cách thực hiện hoàn toàn giống while về điều kiện dừng, cách tính tổng, cách chia số nguyên cho 10.

#include <iostream>
using namespace std;

int main() {
    int n, sum=0;
    cout << "Nhap vao mot so nguyen: ";
    cin >> n;

    do {
        sum += n % 10;
        n /= 10;
    } while (n != 0);

    cout << "Tong cac chu so cua so nguyen la: " << sum << endl;
    return 0;
}

4. Sử dụng hàm đệ quy

Ngoài sử dụng vòng lặp, chúng ta có thể sử dụng hàm đệ quy để tính tổng các chữ số của một số nguyên. Xem đoạn chương trình C++ bên dưới:

#include <iostream>
using namespace std;

int sumOfDigits(int n) {
    if (n == 0) {
        return 0;
    }
    return n%10 + sumOfDigits(n/10);
}

int main() {
    int n;
    cout << "Nhap vao mot so nguyen: ";
    cin >> n;

    cout << "Tong cac chu so cua so nguyen la: " << sumOfDigits(n) << endl;
    return 0;
}

Trong chương trình trên, chúng ta sử dụng hàm sumOfDigits để tính tổng các chữ số. Hàm này lấy một số nguyên làm tham số và sử dụng đệ quy để chia số đó cho 10. Nếu tham số của hàm sumOfDigits bằng 0 thì return 0. Đây là điều kiện dừng của hàm đệ quy.

Trong hàm main, chúng ta nhập một số nguyên dương từ người dùng và gọi hàm sumOfDigits để tính số chữ số. Sau đó, chúng ta in ra kết quả.

5/5 - (2 bình chọn)
Bài trước và bài sau trong môn học<< Đếm số chữ số của một số nguyên dương trong C++Đảo ngược một số nguyên dương trong C++ >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.