题目链接:请点击
思路:isPrime()用于判断是否素数。由于题给出长度L不超过1000,远超出int型所能表示的最大整数,所以定义string类型的数N,用字符输入。注意吸收换行。
i从0~N.length()-1遍历,每次截取K位长度的数num,并判断是否是素数。若是输出,反之,跳出循环最后输出404。此过程中用cnt记录前导0个数(即num==0)
AC代码
#include<iostream>
#include<cstring>
using namespace std;
bool isPrime(int num){
for(int i=2;i*i<=num;i++){
if(num%i==0) return false;
}
return true;
}
int main(){
int L,K;
string N;//长度可能过长 采用字符串输入
cin>>L>>K;
getchar();//吸收换行
cin>>N;
for(int i=0;i<N.length();i++){
int k=K,j=i,num=0,cnt=0;
if(j+k-1>=N.length()) break;//截取k位超出原数字长度
while(k--){
num=num*10+(N[j]-'0');
if(num==0) cnt++;//记录前导0的个数
j++;
}
if(isPrime(num)) {
while(cnt--) cout<<"0";
cout<<num;
return 0;
}
}
cout<<"404";
return 0;
}