输入描述:
有多组数据,输入数据的第一行为一个正整数,表示字符序列的数目,每组数据为一行字符序列。
输出描述:
对每个字符序列,取出所得整数的最大素因子,若字符序列中没有数字或者找出的整数为0,则输出0,每个整数占一行输出。
示例1
输入
3
sdf0ejg3.f?9f
?4afd0s&2d79*(g
abcde
输出
13
857
0
我的代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<math.h>
using namespace std;
int str2int(string str) //字符串转int,自动过滤掉字符串中不为数字的部分
{
int sum = 0;
for (int i = 0; i < str.length(); i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
sum = sum * 10 + str[i] - '0';
}
}
return sum;
}
bool is_prime(int num)
{
if (num <= 1)
{
return false;
}
if (num == 2 || num == 3)
{
return true;
}
else
{
if (num % 2 == 0)
{
return false;
}
else
{
if (num % 3 == 0)
{
return false;
}
else
{
int start = 5;
int distance = 6;
int i = start;
for (i; i <= int(sqrt(num)); i+=distance)
{
if (num%i == 0)
{
return false;
}
else if (num % (i + 2)==0)
{
return false;
}
}
return true;
}
}
}
for (int i = 2; i <= int(sqrt(num)); i++)
{
if (num % i == 0)
{
return false;
}
}
return true;
}
long find_max_prime_factor(long num)
{
int last_max=0;
for (int i = 1; i <= sqrt(num); i++)
{
if (num %i == 0)
{
if (is_prime(num / i))
{
return num / i;
}
else if(is_prime(i))
{
last_max = i;
}
}
}
return last_max;
}
int main()
{
long find_max_prime_factor(long num);
long n;
cin >> n;
while (n--)
{
string temp;
cin >> temp;
cout << find_max_prime_factor(str2int(temp))<<endl;
}
}
看到别人的一个代码:
链接:https://www.nowcoder.com/questionTerminal/2a05dcaa4cde4db989443f206ee3e5c5?f=discussion
int sushu(int a){
int max = 0;
for(int i = 2;i*i <= a;i++){
while(a%i==0){
if(i>max)
max = i;
a/=i;
}
}
return a>max?a:max;
}