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

Kiểm tra số lớn chia hết cho 13 C++

Số lớn lưu dưới dạng string. Kiểm tra chia hết cho 13 bằng 2 quy tắc:

  1. Tổng xen kẽ khối 3 chữ số: Tách thành nhóm 3 chữ số từ phải, cộng/trừ xen kẽ. Nếu kết quả chia hết 13 → số gốc chia hết 13. VD: 2911285 → 2 - 911 + 285 = -624 (chia hết 13)
  2. Quy tắc chữ số cuối: Cắt chữ số cuối, nhân 4 cộng vào phần còn lại. Lặp lại. VD: 2353 → 235+3×4=247 → 24+7×4=52 (chia hết 13)

Ví dụ minh họa (Quy tắc 1)

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

bool isDiv13(string num) {
    int len = num.size();
    if (len == 1 && num[0] == '0') return true;
    
    // Can bang do dai thanh boi cua 3
    if (len % 3 == 1) { num += "00"; len += 2; }
    else if (len % 3 == 2) { num += "0"; len += 1; }
    
    int sum = 0, sign = 1;
    for (int i = len - 1; i >= 0; i -= 3) {
        int group = (num[i] - '0') + (num[i-1] - '0')*10 + (num[i-2] - '0')*100;
        sum += sign * group;
        sign *= -1;
    }
    return (abs(sum) % 13 == 0);
}

int main() {
    string num = "83959092724";
    cout << (isDiv13(num) ? "Chia het" : "Khong chia het");
}

Kết quả

Chia het