2009年西电计算机研究生复试上机题(4)

时间:2021-07-27 06:35:49

题目描述 对于给定的字符序列,从左至右将所有的数字字符取出拼接成一个无符号整数(字符序列长度小于100,拼接出的整数小于2^31,),计算并输出该整数的最大因子(如果是素数,则其最大因子为自身)

 
输入

有多组数据,输入数据的第一行为一个正整数,表示字符序列的数目,每组数据为一行字符序列。

 
输出

对每个字符序列,取出所得整数的最大因子,若字符序列中没有数字或者找出的整数为0,则输出0,每个整数占一行输出。

 
样例输入
3
sdf0ejg3.f?9f
?4afd0s&2d79*(g
abcde
 
样例输出
13
857
0
 
提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

 
来源

2009年西电计算机研究生复试上机题

 

/********************************* 
* 日期:2013-3-10
* 作者:SJF0115
* 题号: 天勤OJ 题目1217: Problem C
* 来源:http://acmclub.com/problem.php?id=1217
* 结果:AC
* 来源:2009年西电计算机研究生复试上机题
* 总结:
**********************************/
#include<stdio.h>
#include<string.h>
#include<math.h>
//最大因子
unsigned int Factor(unsigned int n){
int Max = 0;
for(unsigned int i = 2;i * i <= n;i++){
if(n % i == 0){
//当前因子
Max = i;
}
//除以当前因子
while(n % i == 0){
n = n / i;
}
}
if(n > Max){
Max = n;
}
return Max;
}

int main(){
int i,len,N;
unsigned int sum,Max;
char array[101];
while(scanf("%d",&N) != EOF){
while(N--){
scanf("%s",array);
len = strlen(array);
sum = 0;
//拼接成一个无符号整数
for(i = 0;i < len;i++){
if(array[i] >= '0' && array[i] <= '9'){
sum = sum * 10 + array[i] - '0';
}
}
//若字符序列中没有数字或者找出的整数为0,则输出0
if(sum == 0){
printf("0\n");
}
else if(sum == 1){
printf("1\n");
}
else{
printf("%d\n",Factor(sum));
}
}
}
return 0;
}



测试用例:

2009年西电计算机研究生复试上机题(4)

 

注意:

举例说明:36的因子包括2,3所以最大因子应该是3