Project Euler#8的代码不起作用,有人可以帮我查看

时间:2014-09-20 12:46:15

标签: c

我在2年前做过C编程课程,我试图回到项目Euler问题。我的代码非常草率,对不起。

问题8你计算了一个非常大的1000位数字中13个连续数字的最大乘积。

我编写了一些代码,使用fgets读取粘贴的输入,然后转换char ascii值进行计算和输出。

我的代码返回数字字符串5576689664895,但这显然是错误的。我已经尝试通过对所有可能变大的数字使用long long int来防止溢出错误。

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

int highest=0;
long long int highestproduct=0;
char string[1050]={};
long long int product(int i);

int main(){

    fgets(string,1050,stdin);
    for(int i=0; i<1050;i++){
        if((int)string[i+12]==10){
            i=1050;
        }
        else if(product(i)>highestproduct){
            highestproduct=product(i);
            highest=i;
        };
    }
    for(int z=0; z<13; z++){
        printf("%d", string[highest+z]-48);
    }
    printf("\n");
    fflush(stdout);
}

long long int product (int i){
    long long int interm=1;
    int numbers=0;
    for(int n=0; n<13; n++){
        numbers=(int)string[i+n];
        numbers=numbers-48;
        interm=interm * numbers;
    }
    return interm;
}

2 个答案:

答案 0 :(得分:-1)

您没有仔细阅读问题说明。您正在打印的字符串不是问题所要求的。您的代码看起来像找到问题的解决方案但不打印它。

答案 1 :(得分:-2)

#include<iostream>
#include<string>
using namespace std;
void main(){
    int max=882;
    int num=0;
    int strnum[1000],N;
    char ch[100];
    FILE *fp=fopen("problem8.txt","r");
    while(fgets(ch,100,fp)){
        for(int i=0;i<50;i++)
            strnum[num+i]=ch[i]-'0';
        num+=50;
    }
    fclose(fp);
    for(int i=0;i<995;i++){
        N=strnum[i]*strnum[i+1]*strnum[i+2]*strnum[i+3]*strnum[i+4];
        if(max<N)
            max=N;
    }
    printf("%d\n",max);
}

from here