• 【PAT(甲级)】1065 A+B and C (64bit)[相加时关于编译器的错误]


    Given three integers A, B and C in (−2^{63},2^{63}), you are supposed to tell whether A+B>C.

    Input Specification:

    The first line of the input gives the positive number of test cases, T (≤10). Then T test cases follow, each consists of a single line containing three integers A, B and C, separated by single spaces.

    Output Specification:

    For each test case, output in one line Case #X: true if A+B>C, or Case #X: false otherwise, where X is the case number (starting from 1). Each line should ends with '\n'.

    Sample Input:

    3
    1 2 3
    2 3 4
    9223372036854775807 -9223372036854775808 0

    Sample Output:

    Case #1: false
    Case #2: true
    Case #3: false

    解题思路:

    给出的数字在  (−2^{63},2^{63})的范围内,也就是long long int 的范围内,那么两个long long int 相加如果正数变成负数,说明溢出,也就是肯定大于第三个数;如果两个负数相加,变成正数,那么就是负溢出,肯定小于第三个数。

    易错点:

    代码大家应该都能按照这个思路敲出来,但是有个小bug,例如你用pat上的C++(g++)的编译器时:

    如果你不把注释掉的代码加上,那运行结果就会出错;

    但如果你用的时C++(clang++)的编译器时,你就可以不用加上注释掉的那行代码。

    本质原因应该是因为如果你不定义和的类型的话,有些编译器会把long long int类型数字相加默认变成long int 类型的相加,就会导致结果出错。 

    同一段代码:

            这是C++(g++)编译器的运行结果:

            这是C++(clang++)的运行结果:

    代码:  

    1. #include
    2. using namespace std;
    3. int main(){
    4. int T;
    5. scanf("%d",&T);
    6. long long int A,B,C;
    7. for(int i=0;i
    8. scanf("%lld %lld %lld",&A,&B,&C);
    9. // long long int sum;
    10. // sum = A+B;
    11. if(A>0&&B>0&&A+B<=0){
    12. printf("Case #%lld: true\n",i+1);
    13. }else if(A<0&&B<0&&A+B>=0){
    14. printf("Case #%lld: false\n",i+1);
    15. }else{
    16. if(A+B>C){
    17. printf("Case #%lld: true\n",i+1);
    18. }else{
    19. printf("Case #%lld: false\n",i+1);
    20. }
    21. }
    22. }
    23. return 0;
    24. }

  • 相关阅读:
    算法----删掉一个元素以后全为 1 的最长子数组
    rust注释
    docker概念
    TienChin 渠道管理-前端展示渠道信息
    rabbitMq死信队列
    1 - SpringMVC
    【Python】给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
    如何配置Outlook的SMTP信息?
    centos7安装nginx-阿里云服务器
    left join查询耗时太慢,添加索引解决问题
  • 原文地址:https://blog.csdn.net/weixin_55202895/article/details/126827884