C 它';关于euler项目中的问题8,我可以';我不知道为什么代码不';I don’我不能给我正确的答案

C 它';关于euler项目中的问题8,我可以';我不知道为什么代码不';I don’我不能给我正确的答案,c,C,1000位数字: char dig_num[] = ("73167176531330624919225119674426574742355349194934" "96983520312774506326239578318016984801869478851843" "85861560789112949495459501737958331952853208805511" "12540698747158523863050715

1000位数字:

 char dig_num[] = ("73167176531330624919225119674426574742355349194934"
            "96983520312774506326239578318016984801869478851843"
            "85861560789112949495459501737958331952853208805511"
            "12540698747158523863050715693290963295227443043557"
            "66896648950445244523161731856403098711121722383113"
            "62229893423380308135336276614282806444486645238749"
            "30358907296290491560440772390713810515859307960866"
            "70172427121883998797908792274921901699720888093776"
            "65727333001053367881220235421809751254540594752243"
            "52584907711670556013604839586446706324415722155397"
            "53697817977846174064955149290862569321978468622482"
            "83972241375657056057490261407972968652414535100474"
            "82166370484403199890008895243450658541227588666881"
            "16427171479924442928230863465674813919123162824586"
            "17866458359124566529476545682848912883142607690042"
            "24219022671055626321111109370544217506941658960408"
            "07198403850962455444362981230987879927244284909188"
            "84580156166097919133875499200524063689912560717606"
            "05886116467109405077541002256983155200055935729725"
            "71636269561882670428252483600823257530420752963450");
我为产品签署了两个值a res,为最大值签署了max:

    unsigned long long int res;
unsigned long long int max;
以下是代码的其余部分:

int i;
int j;
i = 0;
max = 0;

while(i < (sizeof(dig_num) - 13))
{
    j = 1;
    res = dig_num[i] - 48;
     while(j < 13)
     {
         res *= dig_num[i + j] - 48;
         j++;
     }
     if(res > max && res != 0)
     {
        max = res;
     }

    i++;
}
 printf("%d",max);
inti;
int j;
i=0;
max=0;
而(i<(大小(数字)-13))
{
j=1;
res=数字[i]-48;
而(j<13)
{
res*=数字[i+j]-48;
j++;
}
如果(分辨率>最大值和分辨率!=0)
{
max=res;
}
i++;
}
printf(“%d”,最大值);

它输出4位数字的正确答案,但为什么当我输入13位时它会给我错误的答案?unsigned的长度不足以容纳一个大数字吗?

代码中有两个编译器警告/错误:

数组初始化会产生
错误:数组是从括号中的字符串常量[-Werror=pedantic]
初始化的,因此请删除字符串周围的
()

printf
行给出了
格式“%d”需要类型为“int”的参数,但参数2的类型为“long long unsigned int”[-Werror=format=]
。对于
无符号long
,正确的格式说明符是
%llu

解决这些问题后,它会给出一个数字,该数字可能是正确的:


请不要使用幻数
48
,而是使用
'0'

您需要调试您的代码您的编译器没有给您任何警告消息吗?尝试将
-Wall
添加到命令行参数中,看看它是否标记了任何内容。正如@bolov所说,你应该学会如何调试你的代码。你不能用
%d
长时间打印。(a)在问题中陈述问题;不要仅仅把它称为ProjectEulerProblem 8。(b) 在问题中包含一个,包括一个完整的程序,您观察到的输出,以及您期望的输出或您如何知道输出是对还是错的指示。