Confident.Nerd
Confident.Nerd

Reputation: 77

Project Euler Problem 8, in C (works for 4 digits, not for 13)

My code spits the correct answer when I calculate the highest multiplication of 4 numbers; however, it does not when I try to calculate 13. (I get an answer but it's incorrect).

BTW, I tried looking at solutions and didn't find something to help me figure out my exact error. I've also made sure to use unsigned long long ints just in case the number would be high, so I don't think that is the problem. Here's my code:

#include <stdio.h>
#include <math.h>

#define SIZE 13

int main (void)
{
    //variables declaration (ull just in case it's too big).
    unsigned long long sum = 0;
    unsigned long long temp = 1;
    int count = 0;

    //here I paste the number from the question to insert it in the array.
    int arr[1000];
    printf("enter the number: \n");
    for (int i=0; i<1000; i++)
    {
        scanf("%1d", &arr[i]);
    }

    //this loop makes sure we calculate all 1000 characters, with going over 1000.
    while (SIZE + count < 1000)
    {
        //loop to calculate the product of SIZE(4 or 13) elements.
        for (int i = 0; i < SIZE; i++)
        {
            temp *= arr[i+count];
        }
        //printf to test that it is working.
        printf("%temp %i: %llu\n", count+1, temp);
        
        //Saving the highest result in sum.
        if (sum < temp)
        {
            sum = temp;
        }
        //resetting and proceeding to the next number.
        temp = 1;
        count++;
    }
    //printing the highest sum.
    printf("\n\nsum: %i\n", sum);


    return 0;
}

//This works with SIZE 4 (the sum is the correct answer) however with SIZE 13 the answer is incorrect

Here is the number I would paste inside the scanf:

7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

The link to the project euler page: https://projecteuler.net/problem=8

Upvotes: 1

Views: 64

Answers (1)

MikeCAT
MikeCAT

Reputation: 75062

You invoked undefined behavior at the line

printf("\n\nsum: %i\n", sum);

By passing data having wrong type to printf(). (%i expects int, but you passed unsigned long long)

It should be

printf("\n\nsum: %llu\n", sum);

Actually you are using %llu in printf("%temp %i: %llu\n", count+1, temp);, so you should also use that here.

Upvotes: 5

Related Questions