题目 1:多组A+B(基础版)
题目描述:
输入多组数据,每组数据包含两个整数 A 和 B,计算它们的和。输入以 文件结尾(EOF) 结束。
输入格式:
每行包含两个整数 A 和 B(-10^9 ≤ A, B ≤ 10^9)。
输出格式:
对于每组输入,输出 A+B 的结果,每行输出一个结果。
输入示例:
1 2
3 4
5 6
输出示例:
3
7
11
解题思路:
- 题目要求输入 多组数据,并且以 EOF(End Of File) 结束,因此不能使用固定次数的循环。
- 使用 Scanner.hasNextInt() 或 BufferedReader.readLine() 来判断是否有新的输入。
解法 1:Scanner
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextInt()) { // 判断是否有输入int a = scanner.nextInt();int b = scanner.nextInt();System.out.println(a + b);}scanner.close();}
}
解法 2:BufferedReader
import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOException;public class Main {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String line;while ((line = reader.readLine()) != null) { // 读取到EOFString[] nums = line.split(" ");int a = Integer.parseInt(nums[0]);int b = Integer.parseInt(nums[1]);System.out.println(a + b);}}}
题目 2:计算圆的面积
题目描述:
输入一个半径 r,计算圆的面积,并保留两位小数。
输入格式:
输入一个正整数 r(1 ≤ r ≤ 1000)。
输出格式:
输出圆的面积,结果保留两位小数。
输入示例:
2
输出示例:
12.57
解题思路:
- 计算圆的面积,公式为 π * r * r。
- 需要使用 格式化输出,保留两位小数,使用 System.out.printf("%.2f", area);。
Java代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int r = scanner.nextInt();double area = Math.PI * r * r;System.out.printf("%.2f\n", area);}}
题目 3:整数除法
题目描述:
输入两个整数 A 和 B,计算 A 除以 B 的整数部分,以及余数。
输入格式:
输入包含两个整数 A 和 B(-10^9 ≤ A ≤ 10^9, 1 ≤ B ≤ 1000)。
输出格式:
输出 A 除以 B 的整数部分和余数,用空格隔开。
输入示例:
10 3
输出示例:
3 1
解题思路:
- 直接使用 A / B 求整数部分,使用 A % B 求余数。
Java代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int a = scanner.nextInt();int b = scanner.nextInt();System.out.println((a / b) + " " + (a % b));}}
题目 4:换行输入的 A+B
题目描述:
输入两行,每行一个整数 A 和 B,计算 A+B。
输入格式:
第一行输入整数 A(-10^9 ≤ A ≤ 10^9),第二行输入整数 B。
输出格式:
输出 A+B 的结果。
输入示例:
5
6
输出示例:
11
解题思路:
- 需要读取 两行 输入,并计算它们的和。
Java代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int a = Integer.parseInt(scanner.nextLine());int b = Integer.parseInt(scanner.nextLine());System.out.println(a + b);}}
题目 5:浮点数的四舍五入
题目描述:
输入一个浮点数 x(0 ≤ x ≤ 10000),对其进行四舍五入,输出整数。
输入格式:
输入一个浮点数 x。
输出格式:
输出 x 四舍五入后的整数。
输入示例:
3.6
输出示例:
4
解题思路:
- 直接使用 Math.round(x) 进行四舍五入。
Java代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);double x = scanner.nextDouble();System.out.println(Math.round(x));}}
题目6:大数求和(int溢出问题)
题目描述:
输入两个整数A和B(取值范围为-1e18到1e18),输出A+B的值。
输入示例:
1000000000000000000 2000000000000000000
输出示例:
3000000000000000000
参考代码:
import java.io.*;import java.math.BigInteger;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] input = br.readLine().split(" ");BigInteger a = new BigInteger(input[0]);BigInteger b = new BigInteger(input[1]);System.out.println(a.add(b));}}
解析:
数据类型选择:int和long均无法存储1e18范围的值,必须使用BigInteger。
易错点:
直接使用long仍可能溢出(如Long.MAX_VALUE = 9e18,但题目输入可能超过此范围)。
未处理负数输入。
题目3:保留三位小数的浮点运算
题目描述:
输入一个浮点数r,表示球的半径,计算球体积并保留三位小数(公式:v=3/4tr3)
输入示例:
3.0
输出示例:
113.097
参考代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);double r = sc.nextDouble();double volume = 4.0 / 3 * Math.PI * Math.pow(r, 3);System.out.printf("%.3f", volume); // 自动四舍五入}}
解析:
浮点运算陷阱:
4 / 3在Java中结果为1(整数除法),需写为4.0 / 3。
格式化输出:printf中的%.3f会自动四舍五入到第三位小数。
题目4:混合输入处理
题目描述:
第一行输入一个整数n,表示后续有n组数据。每组数据包含一个字符串和一个整数,格式为[字符串] [整数]。输出所有整数之和。
输入示例:
3
Apple 5
Banana 10
Orange 15
输出示例:
30
参考代码:
import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int n = Integer.parseInt(br.readLine());int sum = 0;for (int i = 0; i < n; i++) {String[] parts = br.readLine().split(" ");sum += Integer.parseInt(parts[1]); // 取第二个元素}System.out.println(sum);}}
解析:
输入顺序处理:每组数据的第二个元素是整数,需通过索引parts[1]提取。
易错点:
字符串可能包含空格(如Hello World 20,此时parts[1]可能不是整数)。
未处理非数字字符(如输入为Apple Five)。
题目5:边界条件测试(极大值)
题目描述:
输入两个整数A和B(取值范围为0到1e18),输出A*B的值。
输入示例:
1000000000 3000000000
输出示例:
3000000000000000000
参考代码:
import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] input = br.readLine().split(" ");long a = Long.parseLong(input[0]);long b = Long.parseLong(input[1]);System.out.println(a * b);}}
解析:
溢出问题:
1e9 * 3e9 = 3e18,在long范围内(Long.MAX_VALUE = 9e18)。
若结果超过9e18,需改用BigInteger。