Tính tổng các chữ số của một số nguyên
· 6 phút để đọc
Bạn có biết tổng các chữ số của một số có thể tiết lộ nhiều tính chất toán học thú vị không? Ví dụ, một số chia hết cho 9 khi và chỉ khi tổng các chữ số của nó chia hết cho 9. Trong bài viết này, chúng ta sẽ tìm hiểu cách tính tổng các chữ số và khám phá một số ứng dụng thú vị của nó.
Hiểu về bài toán
Input/Output
- Input: Một số nguyên n
- Output: Tổng các chữ số của n
Ví dụ
n = 123 → output = 1 + 2 + 3 = 6
n = 1000 → output = 1 + 0 + 0 + 0 = 1
n = -123 → output = 1 + 2 + 3 = 6 (không tính dấu trừ)
Quy ước
Với số âm, ta chỉ tính tổng các chữ số và bỏ qua dấu trừ.
Các phương pháp giải quyết
1. Phương pháp chia lấy dư
Cách phổ biến nhất là sử dụng phép chia lấy dư (%) để lấy từng chữ số:
Công thức
- Chữ số cuối = n % 10
- Số còn lại = n / 10
2. Phương pháp chuyển sang chuỗi
Một cách khác là chuyển số thành chuỗi và tính tổng các ký tự số:
- Chuyển số thành string
- Duyệt từng ký tự
- Chuyển ký tự thành số và cộng vào tổng
Cài đặt các giải pháp
1. Cài đặt bằng C++
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
// Phương pháp chia lấy dư
int sumDigitsDivision(int n) {
// Chuyển số âm thành dương
n = abs(n);
int sum = 0;
while (n > 0) {
sum += n % 10; // Cộng chữ số cuối
n /= 10; // Bỏ chữ số cuối
}
return sum;
}
// Phương pháp chuyển sang chuỗi
int sumDigitsString(int n) {
// Chuyển số âm thành dương
n = abs(n);
// Chuyển số thành chuỗi
string num = to_string(n);
int sum = 0;
// Duyệt từng ký tự trong chuỗi
for (char digit : num) {
sum += (digit - '0'); // Chuyển ký tự thành số
}
return sum;
}
int main() {
int n;
cout << "Nhap so n = ";
cin >> n;
cout << "Tong chu so (phuong phap 1): " << sumDigitsDivision(n) << endl;
cout << "Tong chu so (phuong phap 2): " << sumDigitsString(n) << endl;
return 0;
}
2. Cài đặt bằng Python
def sum_digits_division(n: int) -> int:
"""Tính tổng các chữ số bằng phương pháp chia lấy dư"""
# Chuyển số âm thành dương
n = abs(n)
total = 0
while n > 0:
total += n % 10 # Cộng chữ số cuối
n //= 10 # Bỏ chữ số cuối
return total
def sum_digits_string(n: int) -> int:
"""Tính tổng các chữ số bằng phương pháp chuyển sang chuỗi"""
# Chuyển số âm thành dương và chuyển thành chuỗi
num_str = str(abs(n))
# Dùng list comprehension để tính tổng
return sum(int(digit) for digit in num_str)
# Python còn có một cách ngắn gọn hơn
def sum_digits_pythonic(n: int) -> int:
"""Cách Pythonic để tính tổng các chữ số"""
return sum(map(int, str(abs(n))))
if __name__ == "__main__":
n = int(input("Nhap n = "))
print(f"Tong chu so (phuong phap 1): {sum_digits_division(n)}")
print(f"Tong chu so (phuong phap 2): {sum_digits_string(n)}")
print(f"Tong chu so (phuong phap 3): {sum_digits_pythonic(n)}")