Project Euler问题8,C(适用于4位数字,不适用于13位数字)



当我计算4个数字的最高乘积时,我的代码会吐出正确的答案;然而,当我试图计算13时,它不是。(我得到了答案,但不正确(。

顺便说一句,我试着寻找解决方案,但没有找到什么可以帮助我找出确切的错误。我还确保使用无符号长整型,以防数字过高,所以我认为这不是问题所在。这是我的代码:

#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: %llun", 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("nnsum: %in", sum);

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

这是我要粘贴在扫描中的数字f:

7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

项目euler页面的链接:https://projecteuler.net/problem=8

您在行调用了未定义的行为

printf("nnsum: %in", sum);

通过将具有错误类型的数据传递到CCD_ 1。(%i期望int,但您通过了unsigned long long(

应该是

printf("nnsum: %llun", sum);

实际上,您在printf("%temp %i: %llun", count+1, temp);中使用%llu,所以您也应该在这里使用它。

最新更新