题目分析
根据题目的含义是要比较多组 A+B 与 C的大小关系
重点 在整数范围中 就是 int 类型的范围
那就存在一个问题 A+B 越出上界(2147483647) 和 越出下界(-2147483648)
解决方案
一、java 中有64位长度的数据类型 long,可以直接进行 A+B>C比较操作
(不建议 本身就是学习思考的题目 越界也就是题目考点)
二、通过思考可以想到,A+B 超越上界时,只有可能是两者都 >= 0 ,并且超越上界后会从下界开始向上加 必然小于0,此时 C在上界范围内必然是 小于 A+B。
同理,A+B 超越下界时,只有可能是两者都 <= 0 ,并且超越下界后会从上界开始向上加 必然大于0,此时 C在下界范围以上必然是 大于 A+B。
其他时候,A+B值必然在(-2147483648 ~ 2147483647)之间,直接进行 A+B>C的比较
代码
一、直接用long数据类型
public static Boolean judge(long A, long B, long C) {
return A + B > C;
}
主程序:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int T = input.nextInt(); //正整数 T (≤10)
int count = 0;
while (count < T) {
//获取测试用例中A B C 通过调用方法进行判断 A+B>C 是否为真
long A = input.nextLong();
long B = input.nextLong();
long C = input.nextLong();
System.out.println("Case #" + ++count + ": " + judge(A,B,C) );
}
}
public static Boolean judge(long A,long B,long C) {
return A + B > C;
}
二、通过int 找出关系判断
// int 数值范围 2147483647 -2147483648
public static Boolean judge(int A, int B, int C) {
//当A+B超出int 上界限2147483647后会变为从-2147483648开始加
if (A >= 0 && B >= 0 && A + B < 0) {
return true;
}
//当A+B超出int 下界限-2147483648后会变为从2147483647开始减
if (A <= 0 && B <= 0 && A + B > 0) {
return false;
}
return A + B > C;
}
主程序:
import java.util.Scanner;
public class Main {
public static Scanner input;
public static void main(String[] args) {
input = new Scanner(System.in);
int T = input.nextInt(); //正整数 T (≤10)
int count = 0;
while (count < T) {
//获取测试用例中A B C 通过调用方法进行判断 A+B>C 是否为真
int A = input.nextInt();
int B = input.nextInt();
int C = input.nextInt();
System.out.println("Case #" + ++count + ": " + judge(A, B, C));
}
}
// int 数值范围 2147483647 -2147483648
public static Boolean judge(int A, int B, int C) {
//当A+B超出int 上界限2147483647后会变为从-2147483648开始加
if (A >= 0 && B >= 0 && A + B < 0) {
return true;
}
//当A+B超出int 下界限-2147483648后会变为从2147483647开始减
if (A <= 0 && B <= 0 && A + B > 0) {
return false;
}
return A + B > C;
}
}
主程序没啥差别,就当凑字数了。