Untitled

 avatar
unknown
plain_text
a month ago
1.7 kB
3
Indexable
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_N 1000
#define MAX_STR 1024

void produtoDigitos(const char *str, int inicio, int fim, char *resultado) {
    long double produto = 1.0;
    int zeroFlag = 1;
    
    for (int i = inicio; i < fim; i++) {
        int digit = str[i] - '0';
        if (digit != 0) {
            produto *= digit;
            zeroFlag = 0;
        }
    }
    
    if (zeroFlag) {
        strcpy(resultado, "0");
    } else {
        snprintf(resultado, MAX_STR, "%.0Lf", produto);
    }
}

void maiorProduto(int n, int s, const char *numero, char *resultado) {
    long double maxProduto = 0;
    char temp[MAX_STR];
    char maxProdutoStr[MAX_STR] = "0";
    
    for (int i = 0; i <= n - s; i++) {
        produtoDigitos(numero, i, i + s, temp);
        long double produto = strtold(temp, NULL);
        if (produto > maxProduto) {
            maxProduto = produto;
            strcpy(maxProdutoStr, temp);
        }
    }
    strcpy(resultado, maxProdutoStr);
}

int main() {
    int C;
    
    if (scanf("%d", &C) != 1) {
        return 1;
    }

    char **resultados = malloc(C * sizeof(char *));
    if (!resultados) return 1;

    for (int i = 0; i < C; i++) {
        resultados[i] = malloc(MAX_STR * sizeof(char));
        if (!resultados[i]) return 1;

        char numero[MAX_N + 1];
        int S;

        if (scanf("%s %d", numero, &S) != 2) {
            return 1;
        }

        int n = strlen(numero);
        maiorProduto(n, S, numero, resultados[i]);
    }

    for (int i = 0; i < C; i++) {
        printf("%s\n", resultados[i]);
        free(resultados[i]);
    }

    free(resultados);
    return 0;
}
Editor is loading...
Leave a Comment