--------------------------------------------------------------------------------------------------------------------------------------------------------
时间限制:1秒 空间限制:32768K 代码长度限制 100 KB
--------------------------------------------------------------------------------------------------------------------------------------------------------
题目描述
给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。
输入描述:
输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数
间以空格分隔。
输出描述:
对每组测试用例,在一行中输出“Case #X: true”如果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
--------------------------------------------------------------------------------------------------------------------------------------------------------
实现思路:
(1).这题最简单的思路是不考虑数据类型的限制,直接使用long类型或者double类型即可,接收数据后,直接判断a+b>c是否成立即可;
(2).这题目出的不是特别的严谨,或者说不是特别好,因为给出的a,b,c的范围为【-2的31次方--2的31次方】,而java中int类型的范围为【-2的31次方--2的31次方-1】,其中2的31次方=2147483648,所以这里如果直接用int类型是不可以的,输入值的范围有一个值没覆盖到。
(3).但如果题目a,b,c的范围为【-2的31次方--2的31次方-1】,且只允许用int类型,这时候主要考察点其实是数据溢出问题,该如何处理呢?需要将问题转换一下,具体转换思路为:
(a).当a、b均大于0,c大于0时,将问题转换为a>c-b是否成立即可;
(b).当a、b均大于0,c小于0时,直接可以得出a+b>c结论;
(c).当a、b异号时,a+b一定不会超出范围溢出,直接比较a+b>c是否成立即可;
--------------------------------------------------------------------------------------------------------------------------------------------------------
import java.util.Scanner;
public class Main{
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int n = scan.nextInt();
for (int i = 0; i < n; i++) {
long a = scan.nextLong();
long b = scan.nextLong();
long c = scan.nextLong();
System.out.println("Case #"+(i+1)+": "+isBigger(a,b,c));
}
}
}
public static boolean isBigger(long a,long b,long c){
return a + b > c ;
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int n = scan.nextInt();
for (int i = 0; i < n; i++) {
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
System.out.println("Case #"+(i+1)+": "+isBigger(a,b,c));
}
}
}
public static boolean isBigger(int a,int b,int c){
if(a > 0 && b > 0 && c > 0){
return a > c - b;
}else if(a > 0 && b > 0 && c < 0){
return true;
}else if((a >= 0 && b <= 0) || (a <= 0 && b >= 0)){
return a + b > c;
}
return false;
}
}