[英]can we assign product of 2 int values to unsigned long long int
廚師是國家廚師王國的新國王。 作為首要和最重要的責任,他想重建切夫蘭的道路系統。 全國有 N(1 到 N)個城市,每個城市 i 都有一個人口 Pi。 廚師想建造一些連接不同城市的雙向道路,這樣每個城市都可以連接到其他每個城市(通過直接道路或通過其他中間城市),並且從任何城市開始,人們都可以通過這些城市訪問該國的所有其他城市道路。 在兩個城市 u 和 v 之間修建道路的成本是 Pu x Pv。 建造道路系統的成本是每條將要建造的道路的成本總和。
幫助 King Chef 找到在 Chefland 建造新的道路系統以使每個城市相互連接的最低成本。
給定約束 1 ≤ T ≤ 10 1 ≤ N ≤ 105 1 ≤ Pi ≤ 106
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int p[n];
for(int i=0;i<n;i++)
{
cin>>p[i];
}
sort(p,p+n);
unsigned long long int cost=0;
for(int i=1;i<n;i++)
{
cost+=p[i]*p[0];
}
cout<<cost<<endl;
}
}
// the above one is not accepted
but below one is accepted
#include <bits/stdc++.h>
using namespace std;
int main() {
int T ;
cin>>T ;
while(T--)
{
long long int N ;
cin>>N ;
vector<long long int> v ;
while(N--)
{
long long int x ;
cin>>x ;
v.push_back(x);
}
long long int cost=0 ;
sort(v.begin() , v.end());
for (int i=1 ; i<v.size() ; i++)
{
cost+=v[i]*v[0];
}
cout<<cost<<endl ;
}
return 0;
}
假設您的問題是如何安全地將兩個int
值相乘並將結果存儲在long long
中:
在 C++ 中,算術表達式的類型由操作數的類型決定。 例如,如果您使用a
和b
為 32 位整數 ( int
) 編寫a * b
,則結果也將是int
,即使稍后您將其轉換為long long
。 這顯然會導致溢出。 為了獲得真正的 64 位結果,您需要將 arguments 之一轉換為 64 位 integer ( long long
):
int a, b;
long long c;
// WRONG: c = a * b;
c = static_cast<long long>(a) * b;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.