0
The question asks that in a number of 1000 digits we find the largest product of 30 adjacent numbers (question link), I know I can do this just by playing a 1000-digit string and checking if 1 to 5 is less than 2 to 6, and so on... but I am learning file manipulation and I would like to do the exercise using this method, so I arrived at this code unsuccessfully the result is incorrect:
#include <stdio.h>
#include <stdlib.h>
#define len 4
int main( int argc, char** argv ) {
char nums[len];
int tot = 1, maior = 0, cont, reset=1;
FILE *numero; //cria um poiteiro numero do tipo arquivo
if((numero = fopen("texto.txt", "r")) == NULL){ //caso ocorra algum erro na hora de abrir o arquivo informe erro e saia do programa
printf("Error!\n");//mostra erro
system("wait");//aguarda o usuario pressionar enter
exit;//sair
}
for ( int i = 0; i < 1000; i++){//percorre cada caractere do numerozao
if ( cont == len){
cont = 0;
}
fscanf(numero, "%c", &nums[cont]);//coloca o valor do caractere em nums
tot = 1;//reset o valor de tot
for ( int a = 0; a < len; a++){
tot *= (nums[a]-'0');//soma todos os valores de nums
}
if( tot > maior){
maior = tot;//caso o valor novo seja maior que o valor antigo, atualize esse valor
}
if ( cont == -1*(1-len)){
i = reset;//reseta o valor de i para que seja pego todos os valores
reset++;
}
cont++;
}
printf("%d\n", maior);
fclose(numero);
return (EXIT_SUCCESS );
}
txt file: 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
As you will always consider groups of 5 then read 5 digits, calculate the product, move the digits one position to the right and read another digit in the last position and redo the calculation.
– anonimo