Project Euler Problem 8,C 语言(适用于 4 位数字,不适用于 13 位数字)

Con*_*erd 1 c

当我计算 4 个数字的最高乘法时,我的代码会吐出正确答案;但是,当我尝试计算 13 时却没有。(我得到了答案,但不正确)。

顺便说一句,我尝试查看解决方案,但没有找到可以帮助我找出确切错误的内容。我还确保使用 unsigned long long ints 以防数字很高,所以我认为这不是问题。这是我的代码:

#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
Run Code Online (Sandbox Code Playgroud)

这是我要粘贴到 scanf 中的数字:

7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*CAT 5

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

printf("\n\nsum: %i\n", sum);
Run Code Online (Sandbox Code Playgroud)

通过将类型错误的数据传递给printf(). (%i期待int,但你通过了unsigned long long)

它应该是

printf("\n\nsum: %llu\n", sum);
Run Code Online (Sandbox Code Playgroud)

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