-1
下面是我試圖解決的問題的鏈接:https://projecteuler.net/problem=8。在C++中的項目歐拉#8得到錯誤的答案,這是最大的uint_64值
我已經寫了一個代碼,似乎在我計算任何從1到12(含)連續數字的產品的時候工作得很好。例如,我得到的12個相鄰數字的最大產品是1792336896,這看起來合乎邏輯,因爲它小於9^12。
但是,當我在代碼中放置13而不是12時,我得到的答案是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;
}
我相信你有過這樣的想法;如果你再次考慮這個問題,我相信你會得出結論,13個最大的相鄰數字值(肯定排除任何零)將會給你最大的產品。 – 2014-11-03 15:47:45
這個問題很難應用一些瘋狂的數學優化定理。一個1000位數的字符串可以很容易地通過暴力解決,這很好。 – vz0 2014-11-03 15:59:20
[OT]:我認爲'i + = digits;'應該是'i + = j;'。 – Jarod42 2014-11-03 16:01:26