這是我的 Project Euler #8 代碼。它通過讀取每個字符從檔案中讀取 1000 位數字,然后將其轉換為整數,然后再將其存盤到陣列中。然后我打算使用回圈來讀取 13 位數字、0-12、1-13、2-14 等的分組。并將它們相乘。如果結果大于前一個最大的,則將其存盤到 num2 中。
#include <iostream>
#include <fstream>
using namespace std;
int num1=1, num2;
int main(){
int digitArray[1000];
char ctemp;
int itemp;
ifstream myfile;
myfile.open("1000 digit number.txt");
if(myfile.is_open()){
for(int i=0; i < 1000; i ){
myfile >> ctemp;
itemp = ctemp - '0';
digitArray[i] = itemp;
}
}
myfile.close();
for(int i = 0; i < 1000; i ){
int j = i;
while(j != (i 13)){
num1 *= digitArray[j];
j ;
if(j == 1000){
break;
}
}
if(num1 > num2){
num2 = num1;
} else {}
}
cout << num2 << endl;
return 0;
}
此代碼輸出值 5000940,這不是正確答案。幫助?
uj5u.com熱心網友回復:
num1不是每 13 個連續數字初始化為 1。break還要在訪問任何越界索引之前檢查條件。
for(int i = 0; i < 1000; i ){
int j = i;
num1=1;
while(j != (i 13)){
if(j == 1000){
break;
}
num1 *= digitArray[j];
j ;
}
if(num1 > num2){
num2 = num1;
}
}
uj5u.com熱心網友回復:
簡化我想出的演算法:
#include <iostream>
#include <string>
#include <cstdint>
int main(){
std::string input;
// std::cin >> input;
input = "1101111111111133111111111111122";
uint64_t prod = 1;
uint64_t m = 0;
size_t count = 0;
for (auto p = input.begin(); p != input.end(); p) {
prod *= *p - '0';
if (prod == 0) {
prod = 1;
count = 0;
} else {
if (count >= 13) {
prod /= *(p - 13) - '0';
}
if ((count >= 13) && (prod > m)) m = prod;
}
}
std::cout << "max = " << m << std::endl;
}
該方法使用滑動視窗逐位更新產品。它從 0 的視窗大小開始,然后在執行此操作之前將其增長到 13,并且每次'0'看到 a 時,視窗大小都會重置為再次增長。
uj5u.com熱心網友回復:
這是有效的:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
int digitArray[1000];
char ctemp;
int itemp;
ifstream myfile;
myfile.open("1000 digit number.txt");
if(myfile.is_open()){
for(int i=0; i < 1000; i ){
myfile >> ctemp;
itemp = ctemp - '0';
digitArray[i] = itemp;
}
}
myfile.close();
long num2;
for(int i = 0; i < 1000; i ){
int j = i;
long num1 = 1;
while(j != (i 13)){
if(j == 1000){
break;
}
num1 *= digitArray[j];
j ;
}
cout << endl;
if(num1 > num2){
num2 = num1;
} else {}
}
cout << num2 << endl;
return 0;
}
需要使 num2 長,移動分解,并在 for 回圈內部而不是外部初始化 num1。老實說,沒想到需要這么大的價值。尷尬,但不管怎樣。謝謝您的幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483276.html
下一篇:將等高線轉換為直線
