簡體   English   中英

我們可以將 2 個 int 值的乘積分配給 unsigned long long int

[英]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++ 中,算術表達式的類型由操作數的類型決定。 例如,如果您使用ab為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM