A1065 A+B and C (64bit) (20)(20 分)

Posted lingr7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A1065 A+B and C (64bit) (20)(20 分)相关的知识,希望对你有一定的参考价值。

A1065 A+B and C (64bit) (20)(20 分)

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&gtC, or "Case #X: false" otherwise, where X is the case number (starting from 1).

Sample Input:

3
1 2 3
2 3 4
9223372036854775807 -9223372036854775808 0

Sample Output:

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

AC代码

#include <stdio.h>
#include <stdbool.h>
int main() {
    int T, tcase = 1;
    scanf("%d", &T);
    while(T--) {
        long long a, b, c;
        scanf("%lld%lld%lld", &a, &b, &c);
        long long res = a + b;//保存可能溢出的结果 
        bool flag;
        if(a > 0 && b > 0 && res < 0) flag = true;
        else if(a < 0 && b < 0 && res >= 0) flag = false;
        else if(res > c) flag = true;
        else flag = false;
        if(flag == true) {
            printf("Case #%d: true
", tcase++);
        } else {
            printf("Case #%d: false
", tcase++);
        }
    }
    return 0;
}

c语言的布尔型

现在的C语言已经有了布尔型:从C99标准开始,类型名字为“**_Bool**”.

? 在此之前的C语言中,使用整型int来表示真假。在输入时:使用非零值表示真;零值表示假。在输出时:真的结果是1,假的结果是0;(这里我所说的“输入”,意思是:当在一个需要布尔值的地方,也就是其它类型转化为布尔类型时,比如 if 条件判断中的的条件;“输出”的意思是:程序的逻辑表达式返回的结果,也就是布尔类型转化为其他类型时,比如 a==b的返回结果,只有0和1两种可能)。

? 所以,现在只要你的编译器支持C99,可以直接使用布尔型了。另外,C99为了让CC++兼容,增加了一个头文件stdbool.h。里面定义了booltruefalse,让我们可以像C++一样的定义布尔类型。

1. 我们自己定义的“仿布尔型”

? 在C99标准被支持之前,我们常常自己模仿定义布尔型,方式有很多种,常见的有下面两种:

/* 第一种方法 */
#define TRUE 1
#define FALSE 0

/* 第二种方法 */ 
enum bool{false, true}; 

2. 使用_Bool

? 现在,我们可以简单的使用 _Bool 来定义布尔型变量。_Bool类型长度为1,只能取值范围为0或1。将任意非零值赋值给_Bool类型,都会先转换为1,表示。将零值赋值给_Bool类型,结果为0,表示。 下面是一个例子程序。

#include <stdio.h> 
#include <stdlib.h>  
int main(){
    _Bool a = 1;
    _Bool b = 2;    /* 使用非零值,b的值为1 */ 
    _Bool c = 0;
    _Bool d = -1;   /* 使用非零值,d的值为1 */ 
    printf("a==%d,  /n", a);
    printf("b==%d,  /n", b);
    printf("c==%d,  /n", c);
    printf("d==%d,  /n", d);
    printf("sizeof(_Bool) == %d  /n", sizeof(_Bool));
    system("pause");
    return EXIT_SUCCESS;
}

运行结果如下:(只有0和1两种取值)

a==1,
b==1,
c==0,
d==1,
sizeof(_Bool) == 1

3. 使用stdbool.h

? 在C++中,通过bool来定义布尔变量,通过truefalse对布尔变量进行赋值。C99为了让我们能够写出与C++兼容的代码,添加了一个头文件<stdbool.h>。在gcc中,这个头文件的源码如下:(注,为了清楚,不重要的注释部分已经省略)

/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.

        This file is part of GCC.
 */
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool    _Bool
#define true    1
#define false   0
#else /* __cplusplus ,应用于C++里,这里不用处理它*/
/* Supporting <stdbool.h> in C++ is a GCC extension.  */
#define _Bool   bool
#define bool    bool
#define false   false
#define true    true
#endif /* __cplusplus *
/* Signal that all the definitions are present.  */
#define __bool_true_false_are_defined   1
#endif  /* stdbool.h */

? 可见,stdbool.h中定义了4个宏,bool、true、false、__bool_true_false_are_defined。 其中bool就是 _Bool类型,true和false的值为1和0,__bool_true_false_are_defined的值为1。
下面是一个例子程序

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h>
/* 测试C99新添加的头文件 stdbool.h */
int main(){
    bool m = true;
    bool n = false;
    printf("m==%d,  n==%d  /n", m, n);
    printf("sizeof(_Bool) == %d  /n", sizeof(_Bool));
    system("pause");
    return EXIT_SUCCESS;
}

执行结果为:

m==1,  n==0
sizeof(_Bool) == 1

以上是关于A1065 A+B and C (64bit) (20)(20 分)的主要内容,如果未能解决你的问题,请参考以下文章

PAT1065: A+B and C (64bit)

PAT.1065 A+B and C(64bit) (正负数溢出处理)

PAT.1065 A+B and C(64bit) (正负数溢出处理)

1065 A+B and C (64bit) (20分)(水)

1065 A+B and C (64bit) (20 分)大数 溢出

[A]1065 A+B and C (64bit)(挖坑待填)