Description
Problem I
Prime Substring
Time Limit: 10 seconds
Given a string of digits, your task is to find the largest prime number which presents in that string. Our prime numbers are values between 2 to 100,000 only.
Input
Each line contains a string of digits (255 digits at most). The line contains only 0 indicates the end which will not be processed. The input does not exceed 1,000 lines.
Output
Print out in each line the largest prime number found in each input string.
Sample Input | Sample Output |
11245 91321150448 1226406 0 | 11 1321 2 |
题目的意思 给你个整数,让你求这个整数中间最大的那个素数。
分析 可以先打出一个素数表,然后从大到小的顺序来检查是否包括在给出的整数中间。
这里我使用了 strstr()函数,之前没有注意过,现在才发现它的作用。
-------------------------------------------------------------------------------------------------------------------------------
1
2
3
|
char
str[]=
"1234 xyz"
;
char
* str1=
strstr
(str,
"34"
);
cout<<str1<<endl;
|
以上出自百度百科。注意这里strstr()是c的东西,所以string无法实用,改为字符型数组就可以了
#include<iostream>
#include<string>
#include<cmath>
#include<math.h>
#include<stdio.h>
#include<string.h>
using namespace std;
#define MAX 100001
int flag[MAX];
int b[MAX];
int plen;
void getprime()
{
int i,j;
memset(flag,1,sizeof(flag));
for(i=2;i*i<MAX;i++)
{
if(flag[i])
for(j=i;j*i<MAX;j++)
flag[i*j]=0;
}
j=0;
for(i=2;i<MAX;i++)
if(flag[i])
b[j++]=i;
plen=j;
}
int main()
{
int n,i,flag,k,j,m,p;
char st[100000],sa[100000];
char c;
getprime();
while(cin>>sa&&strcmp(sa,"0")!=0)
{
for(i=plen-1;i>=0;i--)/// 注意i=0;
{
j=0;
m=b[i];
while(m)
{
st[j++]=m%10+'0';
m=m/10;
}
st[j]='\0'; //注意末尾,之前就是忘了写这个,结果输出一大堆没用的东西
int len=j;
for(k=len-1,j=0;k>j;k--,j++)
{
int t=st[j];
st[j]=st[k];
st[k]=t;
}
if(strstr(sa,st))
{
cout<<b[i]<<endl;
break;
}
}
}
}