我在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;
}
答案 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);
}