欧拉项目#8:C++错误的答案(为一个小的炮制输入给出正确的答案)
Project Euler #8: C++ incorrect answer (gives correct for a small cooked up input)
我在欧拉项目(C++上(为问题 #8 编写了以下代码。请注意,p8_data.txt
包含我从问题陈述中复制的数字。我仔细检查了每次从文件中读取时它确实采用了正确的数字(尽管不是所有 1000 位数字(。
#include <iostream>
#include <cmath>
#include <vector>
#include <fstream>
using namespace std;
int get_max_product(vector<long long> digits_of_num){
// vector<int> product_digits(digits_of_num.size()-12);
long long max = 1;
int num_digits = 13;
cout << digits_of_num.size() << endl;
for (int i=0; i <= digits_of_num.size()-num_digits; i++) {
long long prod = 1;
for (int j=i; j < i+num_digits; j++){
prod *= digits_of_num[j];
// cout << j << endl;
}
if (prod > max){
max = prod;
}
}
return max;
}
int main() {
// you don't really need the number, just the digits;
// it treats the number in the file as characters
ifstream inpFile;
int num_digits = 1000;
vector<long long> digits(num_digits);
char x;
inpFile.open("p8_data.txt");
if (!inpFile){
cerr << "Unable to open the requested file" << endl;
}
int sum = 0;
while (inpFile >> x){
digits[sum] = (long long)x - 48;
cout << digits[sum] << " ";
sum++;
}
inpFile.close();
cout << "nThe program ended happily with ending index = " << sum << endl;
long long max_product;
max_product = get_max_product(digits);
cout << max_product << endl;
return 1;
}
但是,由于某种原因,它给出了不正确的输出:2039787520
.
我在提取数字(即(long long)x - 48)
和(long) x - '0'
以及其他几个数字时尝试并测试了几种变体。我也尝试在取 13 个连续数字的乘积时输出j
,但这也是预期的(987
for 循环的最后一次迭代999
(。
我通过整理一个python3
代码得到了答案,但这个想法是练习C++
。
蟒:
import numpy as np
import os
from copy import deepcopy
import operator
def extract_digits(num):
digits = []
num = int(num)
while (num/10 > 0):
digits.append(deepcopy(num) % 10)
num //= 10
digits.reverse()
return digits
def get_max_product(arr):
max_prod = []
# print(arr.size-13+)
for i in range(len(arr) - 13):
max_prod.append(np.prod(arr[i:i+13]))
return max(max_prod)
with open('p8_data.txt') as rfil:
lines = rfil.readlines()
nums = []
for line in lines:
nums.append(line.rstrip())
digits = []
for n in nums:
digits.extend(extract_digits(n))
# digits = np.array(digits)
print(get_max_product(digits))
这给出了23514624000
哪个是正确的答案!
任何人都可以指出C++
代码可能出现的问题吗?我知道这是一个基本问题,但任何帮助将不胜感激。
尝试long long
long
等等,但我得到了相同的结果。
出于好奇,我尝试制作另一串数字(尽管要短得多(,即
135689898
12999
并针对此字符串运行上述C++
代码,最大乘积为3
个连续数字,输出确实729
.我也检查了其他几个较短的字符串,但结果都是正确的。仅对于问题陈述,它才会产生不正确的答案。
问题出在函数原型上:
int get_max_product(vector<long long> digits_of_num)
您返回的是int
而不是long long
。将其更改为
long long get_max_product(vector<long long> digits_of_num)
或更好(C++14 或更高版本(
auto get_max_product(vector<long long> digits_of_num)
相关文章:
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 我的 cout 上有一个奇怪的输出,它把答案放在第一位,然后在我调用它的地方放一个奇怪的输出.我该怎么办?
- 尝试创建一个程序来查找非二叉树的高度.最终得到一个很长的循环,没有答案
- c++:运行一个函数 8 次,并将每个答案添加到数组或 JSON 中
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 欧拉项目#8:C++错误的答案(为一个小的炮制输入给出正确的答案)
- 通过Insertkey和BuildHeap的另一个建造一个堆,从一个堆堆中获得不同的答案
- 乘以十进制的倍数,给我一个小十进制答案,以回馈我的变量
- 为什么将浮点变量与另一个浮点变量的缩减为int给出了完全不同的答案
- 一个带有参数的程序,为什么此程序有错误的答案
- 为什么我的函数返回一个整数,尽管我已经将答案指定为浮点数
- 试图弄清楚如何使用递归来获得与另一个函数相同的答案
- 你如何得到一个方程,以十进制输出答案
- 创建一个程序,要求用户输入两个数字,并有三个可能的答案.代码未编译.数字(作为int)
- 在C++中,我如何提出一个只接受 2 个字母作为答案的问题
- 我正在尝试编写一个简单的计算程序,但答案一直返回为 0
- SPOJ 问题 ADDREV - 添加反转数字(考虑到我的代码,我得到了一个错误的答案,这很荒谬......
- 我如何让我的部分代码循环并重复一个问题,直到答案是有效的输入C++
- Variabel每次都会给出一个看似随机的答案
- 一个简单的C 功能,在不同的计算机上具有不同的答案