C++ 代码的逻辑有什么问题?

C++ 代码的逻辑有什么问题?,c++,logic,cc,C++,Logic,Cc,我一直试图解决C++中的这个简单问题,但是每次提交时,它都会说错误的答案。我确信我的逻辑是正确的。感谢您的帮助 问题:查找输入数字之间的距离总和 例输入:2 5 8 2 1 距离=2+2+5+0 =9,(1t; 对于(int i=0;i>n; 对于(int j=0;j>a[j]; } 对于(int j=0;j代码的问题在于,您正在使用int类型来表示sum,其最大值(1E11)可能超过int的上限(如果是32位或更少)。请使用long(至少64位)来存储您的和 当然,你也可以优化代码,因为你不需

我一直试图解决C++中的这个简单问题,但是每次提交时,它都会说错误的答案。我确信我的逻辑是正确的。感谢您的帮助

问题:查找输入数字之间的距离总和

例输入:2 5 8 2 1
距离=2+2+5+0 =9,(1 PS:输入不能连续具有相同的编号。
子任务2给出了错误的答案

代码:

#包括
使用名称空间std;
int main(){
//你的密码在这里
int t,a[100000],n,和=0;
cin>>t;
对于(int i=0;i>n;
对于(int j=0;j>a[j];
}

对于(int j=0;j代码的问题在于,您正在使用
int
类型来表示
sum
,其最大值(
1E11
)可能超过
int
的上限(如果是32位或更少)。请使用
long
(至少64位)来存储您的和

当然,你也可以优化代码,因为你不需要一个包含100000个整数的数组,也不需要将值存储在里面。你可以只用两个变量

以下是您的逻辑的修改实现:

#包括
int main(){
int t,n,第一,第二;
long long sum;//或者更好地使用std::int\u fast64\u t sum;
标准:cin>>t;
而(t--){
总和=0;
std::cin>>n>>首先;
对于(int i=0;istd::不能使用
std::int64_t
。没有指定
int
long
long
的确切大小。@ThomasSablik在代码中添加了这一点。顺便说一句,这并不重要,除非您想要固定宽度,而在这个特定问题中,您不需要固定宽度。整数必须至少为64位才能容纳
在这种情况下,标准保证
long-long
将满足该要求,即它将至少为64位。因此,我之前发布的代码也可以正常工作。如果OP使用
std::int32_t
而不是
int
,那么问题将在一小时前得到回答。@ThomasSablik,事实上我是这样认为的回答时间提前1小时(他在评论中提供了问题链接)!:)您在问题提出后30分钟发表了评论。如果OP使用了
std::int32\t
,第一条评论将在不到5分钟后回答问题。您的评论是“尝试更改…”因为您仍然无法确定。评论不适用于扩展讨论;此对话已结束。