算法题练习系列之(四):A+B和C
来源:互联网 发布:炒股软件销售 编辑:程序博客网 时间:2024/06/05 15:06
--------------------------------------------------------------------------------------------------------------------------------------------------------
时间限制: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开始)。
输入例子:
41 2 32 3 42147483647 0 21474836460 -2147483648 -2147483647
输出例子:
Case #1: falseCase #2: trueCase #3: trueCase #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; } }
- 算法题练习系列之(四):A+B和C
- 算法题练习系列之(九):部分A+B
- 算法题练习系列之(十):A除以B
- 算法题练习系列之(十五): D进制的A+B
- 递归练习之 a 到 b 的整数和 (c/c++)
- 算法题: A+B和C (15)
- PAT练习-A+B和C
- c语言练习 7-2. A+B和C
- A+B和C之BigInteger
- 刷题笔记:PAT真题在线练习A+B和C
- A+B输入输出练习系列 I
- A+B输入输出练习系列II
- 算法题练习系列之(一):守形数
- 算法题练习系列之(二):矩阵最大值
- 算法题练习系列之(三):成绩排序
- 算法题练习系列之(五):数字分类
- 算法题练习系列之(六):数素数
- 算法题练习系列之(七):福尔摩斯的约会
- Eclipse Java 与Java EE 的区别
- Spark应用 —— 文本分析
- Bootstrap table插件起步
- oracle 触发器
- MongoDB中的数据查询
- 算法题练习系列之(四):A+B和C
- test
- Java基础:日期和时间
- C/C++程序——递归和循环实现阶乘,并比较N!与(2N N)的大小
- JqGrid 各个属性、方法使用说明
- JQuery控制文本框不能输入,但呈可用状态
- 注解
- mockito修改方法入参
- 基于SpringBoot的Guns管理系统