题目链接
知识点:判断素数、字符串处理
思路
遍历从0到len-k+1的所有长度为k的子串,遇到素数则终止。
代码
#include <bits/stdc++.h>
using namespace std;
bool isprime(int n){
if(n==0||n==1) return false;
for(int i=2;i*i<=n;i++){
if(n%i==0) return false;
}
return true;
}
int main()
{
//freopen("input.txt","r",stdin);
int l,k;
string s,str;
scanf("%d %d",&l,&k);
cin>>s;
bool flag=false;
for(int i=0;i<s.size()-k+1;i++){
str=s.substr(i,k);
int t=stoi(str);
if(isprime(t)==true){
flag=true;
break;
}
}
if(flag==true) cout<<str<<endl;
else if(flag==false) cout<<"404"<<endl;
}
卡住的知识点
1、substr()。使用substr时,遇到i+k>len即超出了源字符串长度的情况,则子字符串将延续到源字符串的结尾。因此可能出现最后四位数是素数,本应返回404但程序将其按素数处理导致flag为真的情况。因此应将i的终止设为len-k+1。