私が解決しようとしている問題へのリンクは次のとおりです: https://projecteuler.net/problem=8。
1 から 12 (含まれる) の連続した数字の積を計算しているときに、うまくいくと思われるコードを書きました。たとえば、隣接する 12 桁の最大積は 1792336896 です。これは 9^12 より小さいため、論理的に見えます。
ただし、コードに 12 ではなく 13 を入れると、得られる答えは 18446744073195294960 であり、かなり不釣り合いです。私はこれを数日間見てきましたが、どこが間違っていたのかわかりません。どなたか調べていただけると本当にありがたいです。
これが私のコードです:
#include <iostream>
#include <fstream>
using namespace std;
int numbers[1000];
string line;
string numb;
uint64_t product=0;
void convert(){
for (int i = 0 ; i < numb.length() ; i++)
{
numbers[i] = numb[i] - '0';
}
}
void calculate_lines(){
int digits = 13;
for (int i=0;i<numb.length()-digits;i++){
int temp=1;
for (int j=i;j<digits+i;j++){
if (numbers[j] == 0){
i+=digits;
break;
}
temp=temp*numbers[j];
}
if (temp>=product){
product=temp;
}
}
}
void read_lines(){
ifstream infile;
infile.open("numbers.txt");
if (infile.is_open())
{
while (getline(infile,line))
{
numb+=line;
}
infile.close();
}
}
int main()
{
read_lines();
convert();
calculate_lines();
cout << product << endl;
return 0;
}