【PAT甲级题解记录】1152 Google Recruitment (20 分)
前言
Problem:1152 Google Recruitment (20 分)
Tags:素数判定 字符串转整数
Difficulty:剧情模式
想流点汗想流点血死而无憾Address:1152 Google Recruitment (20 分)
问题描述
求一个长度为L的字符串,求第一个长为K的素数(考虑字符串中存在的前缀0)
解题思路
从第 0 0 0 位遍历到 L − K L-K L−K 位最多共有 L − K + 1 L-K+1 L−K+1 个数需要判断,找出第一个为素数的即可。
注意前缀0也是需要输出的,所以按照字符串截断并利用stoi()
转整型会是比较合理的方法(这道题int就够了,不放心可以用stoll)。
素数判定问题上,由于数据较小,直接暴力判断即可。
参考代码
#include<iostream>
#include<cmath>
using namespace std;
int L, K; // L:1000 K:10
bool is_prime(int n) {
if (n == 2) return true;
for (int i = 2; i * i <= n; ++i) {
if (n % i == 0) return false;
}
return true;
}
void solution_1152() {
cin >> L >> K;
string s;
cin >> s;
for (int i = 0; i <= L - K; i++) {
string s1 = s.substr(i, K);
int n = stoi(s1);
if (is_prime(n)) {
cout << s1 << endl;
return;
}
}
cout << 404 << endl;
}
int main() {
solution_1152();
return 0;
}
总结
stoi()
字符串转整型,简单的字符串处理好帮手。