当我计算 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
您在该行调用了未定义的行为
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);,所以您也应该在这里使用它。