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

Đếm số chữ số của số nguyên trong C++

Có nhiều cách để đếm số chữ số (digits) của một số nguyên trong C++. Dưới đây là hai phương pháp phổ biến: phương pháp lặp truyền thống và phương pháp toán học dùng logarit.

Phương pháp 1: Lặp chia cho 10 (Truyền thống)

Lặp lại chia số cho 10 cho đến khi bằng 0, đếm số lần lặp.

#include <iostream>

using namespace std;

int count_digits_loop(int number) {
    if (number == 0) return 1;  // Trường hợp đặc biệt: 0 có 1 chữ số
    
    int count = 0;
    number = abs(number);  // Xử lý số âm
    
    while (number != 0) {
        number /= 10;
        count++;
    }
    return count;
}

int main() {
    cout << "1245: " << count_digits_loop(1245) << endl;   // 4
    cout << "-1245: " << count_digits_loop(-1245) << endl;  // 4
    cout << "0: " << count_digits_loop(0) << endl;          // 1
}

Phương pháp 2: Dùng log10 (Toán học) - Nhanh hơn

Công thức: số_chữ_số = floor(log10(|n|)) + 1

#include <iostream>
#include <cmath>

using namespace std;

int count_digits_log(int number) {
    if (number == 0) return 1;
    return static_cast<int>(log10(abs(number))) + 1;
}

int main() {
    cout << "1245: " << count_digits_log(1245) << endl;   // 4
    cout << "999: " << count_digits_log(999) << endl;     // 3
    cout << "1000: " << count_digits_log(1000) << endl;   // 4
}

Kết quả cả hai phương pháp

1245: 4
-1245: 4
0: 1

So sánh hai phương pháp

Tiêu chíChia 10 (Loop)Logarit (log10)
Độ phức tạpO(log n)O(1)
Xử lý số âmCần abs()Cần abs()
Xử lý 0Cần kiểm tra riêngCần kiểm tra riêng
Độ chính xácTuyệt đốiCó thể sai do lỗi float (hiếm)
Hiệu năngChậm hơnNhanh hơn

Phương pháp 3: Chuyển sang string (C++11)

#include <string>

int count_digits_string(int number) {
    string s = to_string(abs(number));
    return s.length();
}

Khuyến nghị

  • Hiệu năng cao: Dùng log10 (có thêm + 1e-9 để tránh lỗi làm tròn)
  • Đơn giản, an toàn: Dùng to_string
  • Không dùng thư viện math: Dùng vòng lặp chia 10