大家好啊,这里是Cyber Striver的博客。今天我继续为大家带来PAT乙级的题解。
目录
题目
题解
#include <stdio.h>
int main()
{
int n = 0,i=0;
long A = 0, B = 0, C = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%ld %ld %ld", &A, &B, &C);
if (A + B > C)
printf("Case #%d: true\n", i + 1);
else
printf("Case #%d: false\n", i + 1);
}
return 0;
}
思路
由于这道题题解比较简单我就不再赘述,那么就简单说说我的心路历程吧。
我第一眼看见这道题,我觉得是有点小难的。因为我以为要按他题目中所说的那样要把全部输入完后再开始打印出结果,这样就会涉及到该怎么存储这3*n个数字就会有点麻烦(其实也还好,可以使用结构体变量,然后定义一个结构体变量数组)
但是不慌,我去测试了一下用例发现并不需要实现这样的功能,输入一组然后输出一组打印也可以实现,所以这个题就很好解决了。
经验总结
1)注意题目的整数的范围是【-2^31~2^31】而int型变量是【-2^31~2^31-1】。如果使用的是int型变量来定义三个整数的话,便会出现溢出的情况。
【eg】在这里补充int型变量的取值范围是怎么算出来的:
①计算正数部分:
1.在一般情况下,int型变量占4个字节。一个字节占八位,故一个int型变量占32位。
2.int为有符号整型,最高位不算大小,只算符号。【正数最高位为0,负数最高位为1】
3.正数在计算机中三码相等:原码=反码=补码。
4.最大整数:01111111111111111111111111111111 ---->2^31-1。
②计算0:
+0:00000000 00000000 00000000 00000000
-0:10000000 00000000 00000000 00000000
因为0只需要一个原码,故C语言规定+0的原码为0的原码,而把-0的原码规定为最小的数的原码。
③计算负数部分:
1.在计算机中,负数是以补码的形式存储的。并存在以下关系:
原码——(最高位不变,其余位按位取反)——反码——(反码+1)——补码
例如:分析一下-1
原码:10000000 00000000 00000000 00000001
反码:111111111 111111111 111111111 111111110
补码:111111111 111111111 111111111 111111111
原码:111111111 111111111 111111111 111111111————>-2^31+1
但是C语言规定了最小的数:
原码为:10000000 00000000 00000000 00000000————>-2^31
反码为:111111111 111111111 111111111 111111111
补码为:1 00000000 00000000 00000000 00000000
2)scanf的一些转换说明符:
本次博客到这里就结束了,如果你觉得我的文章还不错的话,请给我多多点赞评论哦!