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;
}
}