다음은 내가 풀려고하는 문제에 대한 링크입니다. https://projecteuler.net/problem=8.프로젝트 오일러 # 8 C++에서 약간의 최대 uint_64 값이 잘못된 답을 얻음
1에서 12 (포함 된) 연속 숫자의 제품을 계산하는 동안 잘 작동하는 것으로 보이는 코드를 작성했습니다. 예를 들어 내가 얻은 12 개의 인접한 숫자 중 가장 큰 곱은 1792336896이며 9^12 미만이므로 논리적으로 보입니다.
그러나 내 코드에 12 대신 13을 넣으면 얻을 수있는 대답은 18446744073195294960이며 비례합니다. 나는 지금 이틀을보고 있었고, 나는 어디서 잘못되었는지 보지 못했습니다. 누군가가 조사 할 수 있다면 정말 고맙겠습니다. 당신은 변수 int temp
로 제품을 계산
#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;
}
나는 이것을 생각해 본 것으로 믿습니다. 문제를 다시 생각해 보면 13 개의 가장 가까운 숫자 값 (0을 제외해야 함)이 최대 제품을 제공한다고 결론을 내릴 수 있다고 생각합니다. –
이 문제는 미친 수학 최적화 정리를 적용 할 필요가 거의 없습니다. 1000 자리 문자열은 쉽게 무차별 대입으로 해결할 수 있습니다. – vz0
[OT] :'i + = digits;'는'i + = j;'이어야한다고 생각합니다. – Jarod42