繁体   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