问题来源:PAT1094
问题错误表现: 无法正确跳出循环,即延长了循环次数,从而造成结果错误
//测试点4:
//num是string类型的,而num.size()返回的是unsigned int类型的数,
//当L < K时,数学上差值为负数,但是无符号的num.size() - K得到的是极大的正数,所以会继续循环造成错误
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
bool IsPrime(string ans) {
int num = stoi(ans);
for (int i = 2; i < sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main() {
int L, K; //字符串长度 素数长度
cin >> L >> K;
string str;
cin >> str;
string ans;
int flag = 0;
//测试点4:
//num是string类型的,而num.size()返回的是unsigned int类型的数,
//当L < K时,数学上差值为负数,但是无符号的num.size() - K得到的是极大的正数,所以会继续循环造成错误
//测试点2 5:
//i<=L-K 因为substr函数的len长度算上了pos位置
for (int i = 0; i <= L - K; i++) {
ans = str.substr(i, K);
if (stoi(ans) == 1 || stoi(ans) == 0) {
continue;
}
if (IsPrime(ans)) {
flag = 1;
cout << ans << endl;
break;
}
}
if (!flag) {
cout << "404" << endl;
}
}