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

Chương trình C++ kiểm tra mã ISBN

Kiểm tra một dãy số có phải là mã ISBN-10 hợp lệ hay không.

ISBN-10: 10 chữ số. 9 chữ số đầu đại diện cho tiêu đề, nhà xuất bản, nhóm. Chữ số cuối (check digit) có thể là 0-9 hoặc 'X' (giá trị 10).

Cách kiểm tra:

  • Nhân chữ số thứ i (từ 1 đến 9) với (10 - i + 1) = (11 - i).
  • Chữ số thứ 10: nếu 'X' thì giá trị 10, else giá trị chữ số.
  • Tổng các tích. Nếu tổng chia hết cho 11 -> ISBN hợp lệ.

Ví dụ

Input: 002442142X -> Output: Khong phai ISBN
Input: 007462542X -> Output: La ISBN

Thuật toán

Bắt đầu
Bước 1: Hàm isvalid(string &isbn)
    Nếu độ dài != 10 -> false
    sum = 0
    Với i=0 đến 8:
        value = isbn[i] - '0'
        Nếu value không trong [0,9] -> false
        sum += value * (10 - i)
    last = isbn[9]
    Nếu last không phải 'X' và không phải chữ số -> false
    sum += (last == 'X') ? 10 : (last - '0')
    Trả về (sum % 11 == 0)
Bước 2: main()
    isbn = "002442142X"
    Nếu isvalid -> in "La hop le"
    Ngược lại -> in "Khong hop le"
Kết thúc

Ví dụ code

#include <bits/stdc++.h>
using namespace std;

bool isvalid(string &isbn_number) {
    int n = isbn_number.length();
    if (n != 10) return false;
    int sum = 0;
    for (int i = 0; i < 9; i++) {
        int value = isbn_number[i] - '0';
        if (value < 0 || value > 9) return false;
        sum += value * (10 - i);
    }
    char last_val = isbn_number[9];
    if (last_val != 'X' && (last_val < '0' || last_val > '9')) return false;
    sum += (last_val == 'X') ? 10 : (last_val - '0');
    return (sum % 11 == 0);
}

int main() {
    string isbn_number = "002442142X";
    if (isvalid(isbn_number))
        cout << isbn_number << " la hop le";
    else
        cout << isbn_number << " khong hop le";
    return 0;
}

Kết quả

002442142X khong hop le