我的代码思路是枚举2 ~ 99999所有质数, 再判断是否符合要求。 但样例都不对,判断是as函数中没有考虑到前导零的情况, 但不知道怎么改, 请教大佬。
#include <bits/stdc++.h>
using namespace std;
int as(int sum, int n){ // 需要拨动多少次。
int ans = 0;
while(sum != 0){
int t = sum % 10;
int t2 = n % 10;
if(t < t2){
ans += t + 10 - t2;
}else{
ans += t - t2;
}
sum /= 10;
n /= 10;
}
return ans;
}
int sushu(int n){
for(int i = 2; i * i <= n; i++){
if(n % i == 0) return 0;
}
return 1;
}
int main(){
string a;
cin >> a;
int cha = 100000;
int ans = (a[0] - '0') * 10000 + (a[1] - '0') * 1000 + (a[2] - '0') * 100 + (a[3] - '0') * 10 + (a[4] - '0');
// ans 保存原先没有动过的密码
int sum = ans;
// 将 ans 赋值 sum。
if(sushu(ans) == 1){
cout << ans;
return 0;
} // 特判
for(int i = 2; i <= 99999; i++){
if(sushu(i) == 1){
if(as(sum, i) > cha) continue;
cha = as(sum, i);
ans = i;
}
}
if(ans < 10000) cout << 0; // 前导零
if(ans < 1000) cout << 0;
if(ans < 100) cout << 0;
if(ans < 10) cout << 0;
cout << ans; // 输出
return 0;
}