1152Google Recruitment

it2025-01-14  21

题意:给出一个L(<=1000)位的数字,找出其中的可表示为素数的最左边的K(<10)个连续数字。如果找到,就输出这个数字,找不到就输出404。如果数字有前导0,也要输出。

思路:由于K<10,那么可以直接用int表示这个数字。这样最简单的做法就是K个数字为一段,从左向右检查。转为int检查是否为素数。 大坑(测试点2):如果数字为0023,则输出0023,而不是输出23。

#include<iostream> #include<math.h> using namespace std; string s; int l,n; bool isPrime(long long x){ if(x==0||x==1) return false; if(x==2) return true; for(int i=2;i*i<=x;i++){ if(x%i==0){ return false; } } return true; } long long get_num(int beg){ long long x=0; int count=n-1; for(int i=beg;i<beg+n;i++){ x = x + (int(s[i])-'0')*pow(10,count); count--; } return x; } int main(){ cin>>l>>n; cin>>s; for(int i=0;i<=l-n;i++){ long long num = get_num(i); if(isPrime(num)){ cout<<s.substr(i,n);//切割字符串,从i开始的后面n位 return 0; } } cout<<"404"; return 0; }

 

最新回复(0)