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

【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算法题,算法爱好者们欢迎加关注,互相学习,一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值