Untitled
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