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