Submission

Status:

[PPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: chokun

Problemset: บาร์โค้ด

Language: cpp

Time: 0.003 second

Submitted On: 2026-10-06 11:45:55

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

int main() {
    string barcode;
    // รับข้อมูลรหัสบาร์โค้ด 13 หลักเข้ามาเป็นข้อความ
    cin >> barcode;

    // ตรวจสอบความถูกต้องเบื้องต้น (เผื่ออินพุตยาวไม่ครบ 13 หลัก)
    if (barcode.length() != 13) {
        cout << "NO" << endl;
        return 0;
    }

    int check_digit = barcode[12] - '0'; // หลักที่ 1 (ขวาสุด) อยู่ที่ Index 12
    int sum_even = 0;
    int sum_odd = 0;

    // วนลูปคำนวณจาก Index 0 ถึง 11 (ไม่รวมหลักขวาสุด)
    // - ในมุมของโจทย์: นับจากขวาสุดเป็นหลักที่ 1
    // - ดังนั้นในมุมคอมพิวเตอร์ (Index 0-11): 
    //   Index ที่เป็นเลขคี่ (1, 3, 5, 7, 9, 11) จะตรงกับ "หลักคู่" ของโจทย์
    //   Index ที่เป็นเลขคู่ (0, 2, 4, 6, 8, 10) จะตรงกับ "หลักคี่" ของโจทย์
    for (int i = 0; i < 12; i++) {
        int current_num = barcode[i] - '0';
        
        if (i % 2 != 0) { 
            sum_even += current_num; // ตรงกับตำแหน่งหลักคู่ในโจทย์
        } else {
            sum_odd += current_num;  // ตรงกับตำแหน่งหลักคี่ในโจทย์
        }
    }

    // 1. นำผลรวมตำแหน่งหลักคู่คูณด้วย 3
    int part1 = sum_even * 3;

    // 2. รวมค่าสองส่วนเข้าด้วยกัน
    int total_sum = part1 + sum_odd;

    // 3. ตรวจสอบว่า ถ้ารวมกับ check_digit แล้วหาร 10 ลงตัวหรือไม่
    if ((total_sum + check_digit) % 10 == 0) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
}