B1011.A+B和C(值溢出问题)

来源:互联网 发布:vue.js 动态添加dom 编辑:程序博客网 时间:2024/06/10 22:16
【Time Limit:50ms Memory Limit:65 536KB】           难度指数:★★☆☆☆

题目描述:给定区间这里写图片描述内的三个整数A、B和C,请判断A+B是否大于C。

输入格式:第一行给出整数T(T<=10),即测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数以空格分隔。

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

输入样例
4
1 2 3
2 3 4
2147483674 0 2147483646

输出样例
Case#1:flase
Case#2:true
Case#3:true
Case#4:flase

//———————————————————————————–
思路:
输入count用以表示下面输入的数据组数,同时令tcase表示当前是第几组数据,初值为1.对于每组数据,都判断A+B是否大于C,然后输出相应的Case#ⅹ:false和Case#ⅹ:true。

注意:
①如果要执行count次。则应用count–,而非–count(执行count-1次);
②题目给出的范围是这里写图片描述,首先要知道int型变量的数据范围是这里写图片描述,所有当A和B都取最大值这里写图片描述时候,他们相加的值就是这里写图片描述,而这明显超过了int型所能表示的范围了,所以应该将其类型写为long long类型,但是注意在vc++编译器下不支持long long类型,在vc下应该使用_int64,输入使用%I64d。
③此题目还有方法二,利用a和c-b来比较大小,这就不会超出int的范围了;
④注意int,long,long long,_int64,unsigned int,unsigned long ,unsigned long long,unsigned _int64的取值范围,此链接“ ”为总结的范围表示。

//———————————————————————————-
(方法一)代码:

#include<stdio.h>int main(){    int count,tcase = 1;    scanf("%d",&count);    while(count--){        _int64 A,B,C;        scanf("%I64d%I64d%I64d",&A,&B,&C);        if(A+B > C)            printf("Case #%d:true\n",tcase++);        else            printf("Case #%d:false\n",tcase++);    }    return 0;}

(方法二)代码:

#include<stdio.h>int main(){int n;scanf("%d",&n); int a,b,c; int k=1;while(n--){scanf("%d %d %d",&a,&b,&c);if(a > (c-b)) printf("Case #%d: true\n",k);else   printf("Case #%d: false\n",k);k++;}return 0;} 

PS:每天学习和更新CCF/PAT算法题,算法爱好者们欢迎加关注,互相学习,一起进步。

原创粉丝点击