[THHV 2016 - CHVT - 11] Bài 3: Số chứng minh nhân dân
Xem dạng PDFTrong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài
Mọi công dân trong một quốc gia có số chứng minh thư riêng của mình bao gồm 19 chữ số theo dạng sau: ~DDMMYYYYAAAAAAAAAAC~. Chữ số ~DD~ biểu thị ngày sinh, ~MM~ tháng sinh, và ~YYYY~ năm sinh. Năm sinh là một số nguyên dương thuộc phạm vi ~[0001, 9999]~. Năm là nhuận nếu nó chia hết cho 4 và không chia hết cho 100 hoặc là năm chia hết cho 400. Chữ số ký hiệu ~A~ là tùy ý, và ~C~ là chữ số điều khiển được tính bằng thuật toán sau đây:
- Ta biểu diễn tất cả các chữ số trong mã số, ngoại trừ chữ số cuối cùng là ~Z_1 \dots Z_{18}~.
- ~S = (10 \times Z_1 + 9 \times Z_2 + 8 \times Z_3 + \dots + 2 \times Z_9 + 10 \times Z_{10} + 9 \times Z_{11} + 8 \times Z_{12} + \dots + 2 \times Z_{18}) \pmod{19}~.
- Nếu ~S \le 9~ thì ~C = S~, ngược lại ~C = 19 - S~.
Một vài chữ số đã bị xoá hoàn toàn từ một số chứng minh thư và được thay thế bằng ký tự 'X'.
Yêu cầu: Viết một chương trình tính toán số các số chứng minh thư khác nhau tương ứng với số chứng minh thư đã cho.
Input
- Gồm một dòng ghi dãy số 19 ký tự chỉ gồm các chữ số và chữ 'X' biểu thị vị trí bị xóa chữ số.
Output
- Ghi ra số lượng các số chứng minh thư khác nhau tương ứng với số chứng minh thư đã cho. Dữ liệu đảm bảo kết quả tính toán thuộc phạm vi số nguyên 64 bit.
Sample Input 1
XX0220051234567890X
Sample Output 1
28
Sample Input 2
XXXX200577XXXXXXX7X
Sample Output 2
3650000000
Sample Input 3
0XX52X0512X456X8903
Sample Output 3
946
Bình luận