题目描述
对于给定的字符序列,从左至右将所有的数字字符取出拼接成一个无符号整数(字符序列长度小于100,拼接出的整数小于2^31,),计算并输出该整数的最大素因子(如果是素数,则其最大因子为自身)
输入描述:
有多组数据,输入数据的第一行为一个正整数,表示字符序列的数目,每组数据为一行字符序列。
输出描述:
对每个字符序列,取出所得整数的最大素因子,若字符序列中没有数字或者找出的整数为0,则输出0,每个整数占一行输出。
示例1
输入
复制
3
sdf0ejg3.f?9f
?4afd0s&2d79*(g
abcde
输出
复制
13
857
0
#include <iostream>
#include <cmath>
using namespace std;
int maxPrimeFactor(int n) {
int i, ans = 0;
for (i = 2; i * i <= n; i++) {
while (n % i == 0) {
ans = i;
n /= i;
}
}
if (n > 1) { ans = n; }
return ans;
}
void func(string s) {
string s1;
for (char i : s) {
if (i >= '0' && i <= '9') {
s1 += i;
}
}
if (s1.empty()) {
printf("0\n");
} else {
int num;
sscanf(s1.c_str(), "%d", &num);
printf("%d\n", maxPrimeFactor(num));
}
}
int main() {
int num;
while (cin >> num) {
string s;
for (int i = 0; i < num; ++i) {
cin >> s;
func(s);
}
}
return 0;
}