C语言溢出问题

题目描述

PAT Advanced 1065

https://pintia.cn/problem-sets

clipboard.png

题目来源及自己的思路

考察的是溢出问题

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

#include <cstdio>

int main(int argc, char const *argv[])
{
    int N = 0;
    long long A, B, C;

    scanf("%d", &N);

    for (int i = 1; i <= N; ++i)
    {
        scanf("%lld %lld %lld", &A, &B, &C);

        long long result = A + B;

        if (result < 0 && A > 0 && B > 0) {
            // 正溢出
            printf("Case #%d: true\n", i);
        }else if (result > 0 && A < 0 && B < 0) {
            // 负溢出
            printf("Case #%d: false\n", i);
        }else if (result > C) {
            printf("Case #%d: true\n", i);
        } else {
            printf("Case #%d: false\n", i);
        }
    }
    return 0;
}

你期待的结果是什么?实际看到的错误信息又是什么?

我不知道第三个case为什么一直是错的,我实在是排查不出来哪里出问题了,求各位大神帮忙

clipboard.png

阅读 1.8k
1 个回答

两个负数溢出时和还可能会是零.

if (result >= 0 && A < 0 && B < 0) {
  // 负溢出
  printf("Case #%d: false\n", i);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进