题记(38)--整数的最大素因子

目录

一、题目内容

二、输入描述

三、输出描述

四、输入输出示例

五、完整C语言代码


一、题目内容

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

二、输入描述

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

三、输出描述

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

四、输入输出示例

输入:

3
sdf0ejg3.f?9f
?4afd0s&2d79*(g
abcde

输出:

13
857
0

五、完整C语言代码

AC代码~
#include
#include
int IsPrime(long long int n) {
    if (n <= 1)
        return 0;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main() {
    int m;
    char s[101];
    int a[100];
    scanf("%d", &m);
    char c = getchar();
    for (int count = 0; count < m; count++) {
        gets(s);
        int i = 0;
        int j = 0; // 数字数组下标
        long long int sum = 0;
        while (s[i] != '\0') {
            if ('0' <= s[i] && s[i] <= '9') {
                a[j] = s[i] - '0';
                j++;
            }
            i++;
        }
        for (int k = 0; k < j; k++)
            sum = sum * 10 + a[k];
        if (sum == 0)
            printf("0\n");
        else {
            int max = 2;
            for (int k = 1; k <= sqrt(sum); k++) {
                if (sum % k == 0 ) {
                    if (IsPrime(sum / k)) {
                        max = sum / k;
                        break;
                    }
                    if (IsPrime(k))
                        max = k;
                }
            }
            printf("%d\n", max);
        }
    }
    return 0;

}

你可能感兴趣的:(c++)