C++程序未提供预期的输出
C++ program not giving expected output
以下是我的代码,我试图在单个数组传递中找到最大成对乘积:
// A O(n) C++ program to find maximum product pair in an array
#include <iostream>
#include <vector>
#include<conio.h>
using std::vector;
using std::cin;
using std::cout;
// Function to find maximum product pair in arr[0..n-1]
int MaxPairwiseProduct(const vector<long>& arr, int n) {
if (n < 2)
{
return -1;
}
if (n == 2)
{
return arr[0] * arr[1];
}
long posa = 0, posb = 0;
long nega = 0, negb = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] > posa)
{
posb = posa;
posa = arr[i];
}
else if (arr[i] > posb)
posb = arr[i];
if (arr[i] < 0 && abs(arr[i]) > abs(nega))
{
negb = nega;
nega = arr[i];
}
else if (arr[i] < 0 && abs(arr[i]) > abs(negb))
negb = arr[i];
}
if (nega*negb > posa*posb)
return nega*negb;
else
return posa*posb;
}
int main() {
int n;
cin >> n;
vector<long> numbers(n);
for (int i = 0; i < n; ++i) {
cin >> numbers[i];
}
int result = MaxPairwiseProduct(numbers, n);
cout << result << "n";
getchar();
return 0;
}
对于小数字来说,它完全没问题,但是当输入以下内容时:
输入:
2
100000 90000
输出为:
410065408
而不是
9000000000
我无法弄清楚这个输出是如何来的,我什至使用 long 而不是 int 来处理大数字。请帮助我。
如果此环境中的long
或int
(因为存储结果的返回值和result
int
)长度为 32 位或更短,则会发生溢出。
将用于计算的数字类型替换为int64_t
是否可以使用 C++11 或更高版本。
#include <iostream>
#include <vector>
#include <cstdint> // add this to use int64_t
using std::vector;
using std::cin;
using std::cout;
// Function to find maximum product pair in arr[0..n-1]
int64_t MaxPairwiseProduct(const vector<int64_t>& arr, int n) {
if (n < 2)
{
return -1;
}
if (n == 2)
{
return arr[0] * arr[1];
}
int64_t posa = 0, posb = 0;
int64_t nega = 0, negb = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] > posa)
{
posb = posa;
posa = arr[i];
}
else if (arr[i] > posb)
posb = arr[i];
if (arr[i] < 0 && abs(arr[i]) > abs(nega))
{
negb = nega;
nega = arr[i];
}
else if (arr[i] < 0 && abs(arr[i]) > abs(negb))
negb = arr[i];
}
if (nega*negb > posa*posb)
return nega*negb;
else
return posa*posb;
}
int main() {
int n;
cin >> n;
vector<int64_t> numbers(n);
for (int i = 0; i < n; ++i) {
cin >> numbers[i];
}
int64_t result = MaxPairwiseProduct(numbers, n);
cout << result << "n";
getchar();
return 0;
}
相关文章:
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 显示错误输出的简单数组排序程序
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 如何从Windows应用程序输出到标准?
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 如何使用C++读取另一个程序中的源代码输出
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 为什么这个程序的输出不如预期
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- C++ 每次运行程序时我都会"nan"输出的问题
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 而循环:简单的除法程序输出零,不明白为什么
- 如何在 html 页面中插入 cgi 应用程序的输出?
- C 中的输出程序无明显的原因是白色的
- C++:更改简单输出程序的字体
- C++ 简单的输入/输出程序 + 枚举器
- C++字母等效数字代码输出程序
- 编译输出程序集