#include<algorithm>
#include <iostream>
#include<vector>
using namespace std;
long long MaxPairwise(const std::vector<int>& nums){
long long product = 0;
int n;
n=nums.size();
int index1=-1;
for(int i=0;i<n;i ){
if(index1==-1 || nums[index1]<nums[i]){
index1=i;
}
}
int index2=-1;
for(int j=0;j<n;j ){
if(index1!=j && nums[index2]<nums[j]){
index2=j;
}
}
product=nums[index2]*nums[index1];
return ((long long)(product));
}
int main()
{
int n;
cin>>n;
std::vector<int> nums(n);
for(int i=0;i<n;i ){
std::cin>>nums[i];
}
long long result;
result= MaxPairwise(nums);
cout<<result<<'\n';
return 0;
}
即使我為變數分配了 long long 型別,它也會導致輸入 900000 100000 的整數溢位。我該如何解決?我嘗試過更改型別,但無法弄清楚并需要幫助。
uj5u.com熱心網友回復:
product = 1LL * nums[index2] * nums[index1];強制將右側的系數轉換為long long型別。
否則,產品的型別是int,可能會產生溢位效應。
使用std::vector<long long>是另一種選擇。
請注意,這nums.size();是一個std::vector<int>::size_type型別。那肯定是unsigned,而且很可能是std::size_t。換句話說,使用int那里還有另一種溢位的可能性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/490962.html
上一篇:合并串列串列
下一篇:找到這個回圈的時間復雜度?
