Untitled
unknown
plain_text
9 months ago
2.5 kB
10
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