[英]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
我无法弄清楚输出结果如何,我什至用int代替int来处理大量数字。请帮帮我。
溢出会发生,如果long
或int
(因为返回值, result
存储结果是int
)在这种环境下是32位长或更少。
如果可以使用C ++ 11或更高版本,则将用于计算的数字类型替换为int64_t
。
#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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.