Untitled
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