Jan 25, 2022

Euler Problem (8) Using C Language

 Largest Product In Series of Numbers.

/*
Problem statement--
The four adjacent digits in the 1000-digit number
that have the greatest product are 9 × 9 × 8 × 9 = 5832.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450

Find the thirteen adjacent digits in the 1000-digit number
that have the greatest product. What is the value of this product?
*/
#include <stdio.h>
#include <inttypes.h>
#include <string.h>


int main()
{
    // Just put the value of numbers to multiply in 'count' variable
    int count =13;

    char num_arr[] ="73167176531330624919225119674426574742355349194934969835203127745
    06326239578318016984801869478851843858615607891129494954595017379583319528532088055
    11125406987471585238630507156932909632952274430435576689664895044524452316173185640
    30987111217223831136222989342338030813533627661428280644448664523874930358907296290
    49156044077239071381051585930796086670172427121883998797908792274921901699720888093
    77665727333001053367881220235421809751254540594752243525849077116705560136048395864
    46706324415722155397536978179778461740649551492908625693219784686224828397224137565
    70560574902614079729686524145351004748216637048440319989000889524345065854122758866
    68811642717147992444292823086346567481391912316282458617866458359124566529476545682
    84891288314260769004224219022671055626321111109370544217506941658960408071984038509
    62455444362981230987879927244284909188845801561660979191338754992005240636899125607
    17606058861164671094050775410022569831552000559357297257163626956188267042825248360
    0823257530420752963450";
    int last = (sizeof(num_arr) / sizeof(char));
    int array[1001];

    // converting string into number array
    for (int first = 0; first <= (last); first++)
    {
        // Subtracting '0' to convert
        // each character into digit
        // str[a] - '0'
        // = ASCII(str[a]) - ASCII('0')
        // = ASCII(str[a] - 48
        array[first] = num_arr[first] - '0';
    }

    // // printing the integer array
    // for (int first = 0; first < last; first++)
    // {
    //     printf("%d ", array[first]);
    // }

    // checking the maximum product
    uint64_t max_product = 1;
    uint64_t product = 1;
    // first ""count"" digits product
    for (int i = 0; i < count; i++)
    {
        max_product = max_product * array[i];
    }
    // printf("\nThe Product-first : %lld", max_product);
    // product = max_product;

    for (int x = count; x < (last); x++)
    {
        if (array[x - count] != 0) // check if division is performed by zero
        {
            product = ((product / (array[x - count])) * (array[x]));
        }
        else // to avoid division by zero error
        {
            product = array[(x - count) + 1];
            for (int j = ((x - count) + 2); j < (x + 1); j++)
            {
                product = product * array[j];
            }
        }
        // if product is larger then store product in maximum_product.
        if (product > max_product)
        {
            max_product = product;
        printf("\nMax prod : %" PRIu64 "\n", max_product);
        }
    }
    printf("\nMax prod : %" PRIu64 "\n", max_product);

    return 0;
}

No comments:

Post a Comment

Comparing two files in C language.

Operations on More than one File.    # include < stdio.h > # include < stdlib.h > # include < string.h > int main ( int ...