C Euler#8项目中的问题

C Euler#8项目中的问题,c,type-conversion,C,Type Conversion,我最近一直在做欧拉计划。我正在用C语言编程,有一个关于问题8的问题。问题是: Find the greatest product of five consecutive digits in the 1000-digit number. 73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737

我最近一直在做欧拉计划。我正在用C语言编程,有一个关于问题8的问题。问题是:

Find the greatest product of five consecutive digits in the 1000-digit number.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474 
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
以下是我自己已经完成的工作:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char *string = "731671765313306249192251196744.............";
    char *x;
    x = string;
    for(int counter = 0;counter < 2;counter++)
    {
        printf("%s\n", x + strlen(x) - 5);
        x = x + strlen(x) - 5;
    }
}
#包括
#包括
内部主(空)
{
char*string=“731671765313306249192251196744…………”;
char*x;
x=字符串;
用于(int计数器=0;计数器<2;计数器++)
{
printf(“%s\n”,x+strlen(x)-5);
x=x+strlen(x)-5;
}
}

所以,问题是我们无法理解下一步该做什么。我能够提取这些数字,但是使用这些数字并创建快速高效的算法的算法是什么呢。所以,任何帮助,请!另一个问题是,当我尝试将char转换为int值时,它失败并给出错误“error:指向整数转换的不兼容指针使用'char[1001]类型的表达式初始化'char'“。我使用了如下方法来转换值:,仅此而已。如果有更多建议,请提出更好的建议…

您可以读取字符串中的字符,将其转换为整数,然后找到它们的乘积,以检查哪一组连续的5个整数的乘积最高。您会失去乐趣和学习的乐趣。”你可以自己尝试,你可以试试这个

#include <stdio.h>
#include <string.h>

// calculates the product of a group of numeric chars
// after converting them to int type
int gproduct(char *s, int glen) {
    int i = 0;
    int val = 1;

    // convert a numeric char to int value by subtracting '0'
    // assuming the chars are encoded in ascii. consider using
    // the standard library function atoi for portability.
    while(i < glen)
        val *= (s[i++] - '0');  

    return val;
}

int main(void) {
    char *numstr = "731671765313306249192251196744.............";
    int glen = 5;  // group length
    int maxcount = strlen(numstr) - glen;  
    int maxval = gproduct(numstr, glen);  // initialize maxval
    int tempval;
    for(int i = 1; i < maxcount; i++) {
        tempval = gproduct(numstr + i, glen);
        if(tempval > maxval) 
            maxval = tempval;  
    }
    printf("%d\n", maxval);
    return 0;
}   
#包括
#包括
//计算一组数字字符的乘积
//将它们转换为int类型后
int GPProduct(char*s,int glen){
int i=0;
int-val=1;
//通过减去“0”将数字字符转换为int值
//假设字符在ASCII中编码。考虑使用
//标准库函数atoi具有可移植性。
而(我<格伦)
val*=(s[i++]-'0');
返回val;
}
内部主(空){
char*numstr=“731671765313306249192251196744…………”;
int glen=5;//组长度
int maxcount=斯特伦(numstr)-格伦;
int maxval=gpproduct(numstr,glen);//初始化maxval
int tempval;
对于(int i=1;i最大值)
maxval=tempval;
}
printf(“%d\n”,maxval);
返回0;
}   

你真的期望将1000位字符串转换为
int
会得到相同的整数吗?你为什么要通过Project Euler练习来这里要求算法?挑战的重点是自己设计算法。那么@FilipeGonçalves,我下一步该怎么做找到更好的表示法。例如,你ht希望使用一个无符号字符数组,并将每个数字存储到每个位置。不要将其存储为字符串-将其存储为字节数组。然后只做一个循环,查看接下来的5个位置并将它们相乘,存储迄今为止看到的最大结果。显然,您对C语言是新手。与大多数新语言一样,您应该是co定义一个算法,然后将它与语言结合起来(如果存在这样的东西,那么它的运行时库,在这里就是这样的)必须提供实现该算法的方法。要做到这一点,你必须熟悉语言基础知识及其最常见的库函数。也就是说,本论坛上发布了许多关于Euler问题的解决方案,包括这一个。但我不建议你在自己更努力地解决这些问题之前寻找这些解决方案st.Ya WhozCraig,我对C有点陌生,但是的,@FilipeGonçalves说的有道理,所以你能介绍一下你的算法来帮助我吗