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

2019-04-14 20:34发布

题目描述 对于给定的字符序列,从左至右将所有的数字字符取出拼接成一个无符号整数(字符序列长度小于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 #include #include //最大因子 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 "); } else if(sum == 1){ printf("1 "); } else{ printf("%d ",Factor(sum)); } } } return 0; }


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