PAT乙级1011——A+B和C

题目:

题目详情 - 1011 A+B 和 C (15 分) (pintia.cn)

 

这道题真的把我给整麻了。好简单的一道题。好麻。看了好久终于发现自己哪里搞错了,慢慢说。

 

首先审题:很简单,要求我们输入n组数字(n是用户自定义的整数),然后每组数字包含三个在给定区间 [2^31,2^31] 内的 整数

要求我们比较前两个数字的和与第三个数字的大小

题目很简单,有手就行。这里主要讲(我觉得是坑的)几个坑:

1.关于结果的输出格式:这个我有点迷惑。我的理解是,先让用户一下子全部输入一个n+n组数字,然后再一下子输出n行结果。那么这时候就需要当用户每输入一次的时候,我们就将比较的结果记录下来(记录到一个数组里面,可以用1和0代表大于和不大于),最后按照数组里的结果,再输出Case那些语句。但是再看过一些答案之后,我发现,答案的做法就是用户每输入一行数字,我们就直接将比较得出来的结果直接输出。也就是,输出的结果是这样:

 

 而不是这样:

 

 我震惊了。原来是我刷题少了,输出还可以这样!

2.关于数据类型的设定:这里我要补充一下基本功:

 

unsigned int (unsigned long)

  • 4字节8位可表达位数:2^32=42 9496 7296

  • 范围:0 ~ 42 9496 7295 (42*10^8)

int (long)

  • 4字节8位可表达位数:2^32=42 9496 7296

  • 范围:-21 4748 3648 ~ 21 4748 3647 (21*10^8)

long long (__int64)

  • 8字节8位可表达位数:2^64=1844 6744 0737 0960 0000

  • 范围:-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16)

unsigned long (unsigned __int64)

  • 8字节8位可表达位数:2^64=1844 6744 0737 0960 0000

  • 范围:0 ~ 1844 6744 0737 0955 1615 (1844*10^16)

两个超级大的数加起来会超过int的范围,所以这里用long

 

代码:

#include <iostream>
using namespace std;
int main()
{
    int t;
    cin >>t;
    long a,b,c;
    for(int i=1;i<=t;i++)
    {
        cin >> a >> b >> c;
        cout << "Case #"<< i <<": " << (a + b > c ? "true" : "false")<< endl;
    }
    system("pause");
    return 0;
}

这里插一句为什么我之前一直报错呢:

 

 服气了,居然看了好几遍没有看出来,以后不犯了

posted @ 2021-12-09 15:23  EowynTang  阅读(44)  评论(0)    收藏  举报