解法一
🔹 大數取模
為了不一直重複取模浪費時間
當 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;
}