Untitled

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


char* multiplicarDigitos(const char *str) {
    int tamanhoResultado = 200;
    char *resultado = (char*)malloc(tamanhoResultado * sizeof(char));
    if (!resultado) return NULL;
    strcpy(resultado, "1");

    size_t len = strlen(str);
    for (size_t i = 0; i < len; i++) {
        if (str[i] >= '0' && str[i] <= '9') {
            int num = str[i] - '0';
            int carry = 0, resLen = strlen(resultado);
            char temp[tamanhoResultado];
            memset(temp, 0, sizeof(temp));

            for (int j = resLen - 1, k = 0; j >= 0; j--, k++) {
                int prod = (resultado[j] - '0') * num + carry;
                temp[k] = (prod % 10) + '0';
                carry = prod / 10;
            }

            if (carry) {
                temp[strlen(temp)] = carry + '0';
            }

            int tempLen = strlen(temp);
            for (int j = 0; j < tempLen / 2; j++) {
                char swap = temp[j];
                temp[j] = temp[tempLen - j - 1];
                temp[tempLen - j - 1] = swap;
            }

            strcpy(resultado, temp);
        }
    }
    return resultado;
}

int compararStrings(const char *str1, const char *str2) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);

    if (len1 > len2) return 1;
    if (len1 < len2) return -1;

    return strcmp(str1, str2);
}

void dividirEAplicarMultiplicacao(const char *str, int n, char *maiorNumero) {
    int len = strlen(str);

    for (int i = 0; i <= len - n; i++) {
        char parte[100];
        strncpy(parte, str + i, n);
        parte[n] = '\0';

        char *resultadoMultiplicado = multiplicarDigitos(parte);
        if (resultadoMultiplicado) {
            if (compararStrings(resultadoMultiplicado, maiorNumero) > 0) {
                strcpy(maiorNumero, resultadoMultiplicado);
            }
            free(resultadoMultiplicado);
        }
    }
}

int main() {
    int v;
    if (scanf("%d", &v) != 1 && v > 0 && v <= 100) return 1;

    char resultados[v][1000];

    int contador = 0;

    while (v--) {
        char str[1000];
        int n;
        char maiorNumero[1000] = "0";

        if (scanf("%s %d", str, &n) != 2) return 1;

        dividirEAplicarMultiplicacao(str, n, maiorNumero);
        strcpy(resultados[contador], maiorNumero);
        contador++;
    }

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

    return 0;
}
Editor is loading...
Leave a Comment