q027. 喵-17的倍數 5/16/2025

解法一

🔹 大數取模

為了不一直重複取模浪費時間
res > 1e16 再進行取模

✅ 完整代碼

評分結果(參考) : AC (12ms, 9.1MB)

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

int mod(string num, int divisor){
    long long res = 0;
    
    for(int i=0; i<num.size(); i++){
        res = res*10 + (int)(num[i]-'0');
        if(res > 1e16) res %= divisor;
    }
    
    return res % divisor;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string num;
    cin >> num;
    
    int r = mod(num, 17);
    
    if(r == 0) cout << "Yes";
    else cout << (r < 17-r ? r : 17-r);

    return 0;
}

解法二、解法一的優化版

🔹 記憶體優化

測資很大,將整個字串存進 string 相當耗資源
試著一次讀取一個字元

✅ 完整代碼

評分結果(參考) : AC (11ms, 356KB)

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

int mod(int divisor){
    long long res = 0;

    char c = getchar_unlocked();
    for(; c>='0' && c<='9' && c!=EOF; c=getchar_unlocked()){
        res = res*10 + (c-'0');
        if(res > 1e16) res %= divisor;
    }
    
    return res % divisor;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int r = mod(17);
    
    if(r == 0) cout << "Yes";
    else cout << (r < 17-r ? r : 17-r);

    return 0;
}