PAT乙级1011

PAT1011

题目描述:

给定区间 [ − 2 31 , 2 31 ] [-2^{31}, 2^{31}] [231,231]内的3个整数 A 、 B A、B AB C C C,请判断 A + B A + B A+B是否大于 C C C

输入格式:

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

输出格式:

对每组测试用例,在一行中输出Case #X: true如果 A + B > C A+B>C 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

算法思路与代码实现:

Python实现

Python语言不必考虑整数之和溢出的问题,比较简单,直接判断并输出即可。

n = int(input())
for i in range(n):
    a, b, c = map(int, input().split())
    print('Case #{0}: {1}'.format(i + 1, 'true' if a + b > c else 'false'))

C++实现

可以选择使用long long int或者直接用int,使用long long int不需判断溢出问题,使用普通int类型则需要判断是否溢出。两种情况都不是特别复杂。
使用long long int:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        long long int a, b, c;
        cin >> a >> b >> c;
        cout << "Case #" << i + 1 << ": " << boolalpha << (a + b > c) << endl;
    }
    return 0;
}

使用int:

#include <iostream>
using namespace std;

int main() {
    int n, a, b, c;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a >> b >> c;
        if (a + b < 0 && a > 0 && b > 0)
            cout << "Case #" << i + 1 << ": " << "true" << endl;
        else if (a + b >= 0 && a < 0 && b < 0)
            cout << "Case #" << i + 1 << ": " << "false" << endl;
        else
            cout << "Case #" << i + 1 << ": " << boolalpha << (a + b > c) << endl;
    }
    return 0;
}

总结:

本题意在考查各类型所能表示数字的范围以及整数溢出问题,需要注意sizeof(int) <= sizeof(long int)int类型所能表示的整数范围是 [ − 2147483648 , 2147483647 ] [-2147483648, 2147483647] [2147483648,2147483647],基于此可以运用不同的方法加以解决。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值