1011 A+B 和 C (15 分)

给定区间 [−2​31​​,2​31​​] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。

输入格式:

输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。

输出格式:

对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。

输入样例:

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647

输出样例:

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

正确代码: 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    long long a,b,c;
    int i=0,n=0;
    int result[10];

    scanf("%d",&n);

    for(i=0; i<n; i++)
    {
        scanf("%lld %lld %lld",&a,&b,&c);
        result[i] = (a+b>c) ? 1 : 0;
    }

    for(i=0; i<n; i++)
        printf("Case #%d: %s\n",i+1,(result[i]?"true":"false"));
    return 0;
}

这个题挺简单,只是需要注意数据长度,这里栽了一次。。。

题目给出的区间是[-2^63,2^63],首先需要知道的int型的范围是[-2^63,2^63-1],在最大值这里会超出int的范围。另外,两个int型的变量相加,最后可能是超过int型的,因此在本题中,必须使用long long作为ABC的变量类型,输入输出格式必须是%lld,否则就进坑了。(Yes,that's me)

总结:数据范围分清, int+int 也可能超出 int。就算是 2^31 也是超出int。

int整型范围:32位(32位整数,10^9以内),-2^31~~+(2^31)-1。绝对值在10^9以内的都可以定义成int。


long long范围:(64位整数,10^18以内)2的63次方,-2^63~~+(2^63)-1。超过2147483647的就要用long long。后面要加LL标识符。