1544 - Problem C
时间限制 : 1 秒
内存限制 : 32 MB
对于给定的字符序列,从左至右将所有的数字字符取出拼接成一个无符号整数(字符序列长度小于100,拼接出的整数小于2^31,),计算并输出该整数的最大素因子(如果是素数,则其最大因子为自身)
题目输入
有多组数据,输入数据的第一行为一个正整数,表示字符序列的数目,每组数据为一行字符序列。
题目输出
对每个字符序列,取出所得整数的最大素因子,若字符序列中没有数字或者找出的整数为0,则输出0,每个整数占一行输出。
输入/输出样例
输入格式
3 sdf0ejg3.f?9f ?4afd0s&2d79*(g abcde
输出格式
13 857 0
C语言解答
#include<stdio.h> #include<ctype.h> int main() { char str[128]; int N,r,i,j; for(scanf("%d",&N);N--;) { scanf("%s",str); for(i=r=0;str[i];i++) if (isdigit(str[i])) r=r*10+str[i]-'0'; if (!r) j=0; else if (r==1) j=1; else { for(i=2;(long)i*i<=r;i++) if (r%i==0) { j=i; while(r%i==0) r/=i; } if (r>1) j=r; } printf("%d\n",j); } return 0; }
C++解答
#include<stdio.h> #include<ctype.h> int main() { char str[128]; int N,r,i,j; for(scanf("%d",&N);N--;) { scanf("%s",str); for(i=r=0;str[i];i++) if (isdigit(str[i])) r=r*10+str[i]-'0'; if (!r) j=0; else if (r==1) j=1; else { for(i=2;(long long)i*i<=r;i++) if (r%i==0) { j=i; while(r%i==0) r/=i; } if (r>1) j=r; } printf("%d\n",j); } return 0; }