Reputation: 77
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
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