代码有些复杂,可以跟我讨论,我的ans的位数都没有8 位,帮忙看看谢谢了
#include<bits/stdc++.h>
using namespace std;
const int N = 15;
int n, cnt/*answer*/;
string date[N];
int d[N][10];
bool ifzs/*if it is zhishu*/(int a){
for(int i = 2; i * i <= a; i++){
if(!(a % i)){
return false;
}
}
return true;
}
int wei(int a){
int cnt = 0;
while(a){
cnt++;
a/=10;
}
return cnt;
}
void dfs(int sum, int order, int step){
cout << "cnt:" << cnt << " sum:" << sum << " order:" << order << " step:" << step << endl;
int w = wei(sum);
if(d[order][8 - step]){
for(int i = 0; i <= 9; i++){
if(step == 8){
if(ifzs(sum + (i * (int)pow(10, w)))){
cout << "ans:" << sum + (i * (int)pow(10, w)) << endl;
cnt++;
}
return;
}
if(((step == 2 || step == 4) && ifzs(sum + (i * (int)pow(10, w))))|| !(step == 2 || step == 4)){
sum += (i * (int)pow(10, w));
step++;
dfs(sum, order, step);
step--;
sum -= (i * (int)pow(10, w));
}else if((step == 2 || step == 4) && !ifzs(sum + (i * (int)pow(10, w)))){
return;
}
}
}else{
if(step == 8){
if(ifzs(sum + ((date[order][8 - step] - '0') * (int)pow(10, w)))){
cout << "ans:" << sum + ((date[order][8 - step] - '0') * (int)pow(10, w)) << endl;
cnt++;
}
return;
}
if(((step == 2 || step == 4) && ifzs(sum + ((date[order][8 - step] - '0') * (int)pow(10, w))))|| !(step == 2 || step == 4)){
sum += ((date[order][8 - step] - '0') * (int)pow(10, w));
step++;
dfs(sum, order, step);
step--;
sum -= ((date[order][8 - step] - '0') * (int)pow(10, w));
}else if((step == 2 || step == 4) && !ifzs(sum + ((date[order][8 - step] - '0') * (int)pow(10, w)))){
return;
}
}
}
int main(){
/*
freopen(".in","r",stdin);
freopen(".out","w",stdout);
*/
cin >> n;
for(int i = 1; i <= n; i++){
cin >> date[i];
for(int j = 0; j < 8; j++){
if(date[i][j] == '-') d[i][j]++;
}
dfs(0, i, 1);
cout << cnt << endl;
cnt = 0;
}
return 0;
}