【发布时间】:2022-12-20 09:28:27
【问题描述】:
所以我尝试编译以下代码:
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> nums;
while(n--){
int temp;
cin>>temp;
nums.push_back(temp);
}
long long sum=0;
for(int i:nums){
sum+=i;
}
int index;
long long temp_sum=0,avgdiff=0,min_avgdiff=LLONG_MAX;
for(int i=0;i<nums.size();i++){
temp_sum+=nums[i];
if(i!=nums.size()-1) avgdiff=abs((temp_sum/(i+1))-((sum-temp_sum)/(nums.size()-i-1)));
else avgdiff=temp_sum/(i+1);
if(min_avgdiff>avgdiff){
min_avgdiff=avgdiff;
index=i;
}
}
cout<<index;
return 0;
}
之后,我在第 22 行(代码中最长的一行)遇到了这样的错误:“错误:重载 'abs(long long unsigned int)' 的调用不明确”。
但是当我修改我的代码时,如下所示:
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> nums;
while(n--){
int temp;
cin>>temp;
nums.push_back(temp);
}
long long sum=0;
for(int i:nums){
sum+=i;
}
int index;
long long temp_sum=0,avgdiff=0,min_avgdiff=LLONG_MAX;
for(int i=0;i<nums.size();i++){
temp_sum+=nums[i];
long long avg1=temp_sum/(i+1),avg2=0;
if(i!=nums.size()-1){
avg2=(sum-temp_sum)/(nums.size()-i-1);
}
avgdiff=abs(avg1-avg2);
if(min_avgdiff>avgdiff){
min_avgdiff=avgdiff;
index=i;
}
}
cout<<index;
return 0;
}
我没有收到任何错误!!谁能解释我为什么?
【问题讨论】:
-
请edit 你的问题包括完整和完整的构建输出,复制粘贴为文本。它通常可以包含有助于理解问题的注释或其他信息。
-
空格不收取额外费用:-)。如果运算符被空格隔开一点并且语句被分成几行较短的行,那么最长的一行将不那么令人生畏(并且更容易阅读)。
-
这是类型(如错误消息所述)。您将
long long传递给abs的第二个版本很好。但在第一个示例中,您传递的是unsigned long long并且没有过载。无符号类型的原因是存在具有无符号类型的nums.size()。 -
@Someprogrammerdude 是的,当然
-
error: call of overloaded 'abs(long long unsigned int)' is ambiguousabs 来自unsinged?这聪明吗?unsigned类型可以为负数吗?
标签: c++