首页 > 解决方案 > C-Codeforces 中的未定义行为

问题描述

这是我编写的代码,我必须先将所有负奇数和正整数相加,然后将它们相加。例如:如果 n=5:

evn = 2 + 4 = 6

odd = -1 -3 - 5 = -9

result= 6 + (-9) = -3(ans)

此代码在我的 Codeblocks Ide 中成功运行,但是当它在 Codeforces 编译器中显示垃圾值时。我已尽力弄清楚,谁能告诉我如何解决这个问题?另外请告诉我如何找到UB?

 #include<stdio.h>
 int main()
{   
 long long int n;
 scanf("%lld",&n);

 long long int evn,odd;

 if(n%2==0) //Im currently facing problem in this case.I got the expected output in codeblocksIDE
   {
     evn=n/2;
     long long int sum_pos = (4+(evn-1)*2)*evn/2;
     long long int sum_neg = (-2+(evn-1)*-2)*evn/2;
     long long int ans = sum_pos+sum_neg;
     printf("%lld",ans);
   }
else
 {
   evn = n/2;
   odd = evn+1;
   long long int sum_pos = (4+(evn-1)*2)*evn/2;
   long long int sum_neg = (-2+(odd-1)*-2)*odd/2;
   long long int ans = sum_pos+sum_neg;
  printf("%lld",ans);
 }
}


 Test: #16, time: 15 ms., memory: 4 KB, exit code: 0, checker exit code: 1, verdict: WRONG_ANSWER
 Input
 208170109961052

 Output
 -9223267951799795282

 Answer
 104085054980526
 Checker Log
 wrong answer 1st numbers differ - expected: '104085054980526', found: '-9223267951799795282'

标签: c

解决方案


推荐阅读