【Java】L1-025 正整数A+B (15 分)(测试点3分析)

L1-025 正整数A+B (15 分)

题的目标很简单,就是求两个正整数AB的和,其中AB都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:

输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

22. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla...33

输出样例3:

? + ? = ?

Java 代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String s = in.readLine();
		String r1 = s.substring(0, s.indexOf(' '));
		String r2 = s.substring(s.indexOf(' ') + 1, s.length());
		String s1 = "", s2 = "", s3 = "";
		int n1 = 0, n2 = 0;
		try {
			int x1 = Integer.parseInt(r1);
			if (x1 < 1 || x1 > 1000) {
				s1 = "?";
				s3 = "?";
			}
			n1 = x1;
		} catch (NumberFormatException e) {
			s1 = "?";
			s3 = "?";
		}
		try {
			int x2 = Integer.parseInt(r2);
			if (x2 < 1 || x2 > 1000) {
				s2 = "?";
				s3 = "?";
			}
			n2 = x2;
		} catch (NumberFormatException e) {
			s2 = "?";
			s3 = "?";
		}
		System.out.print(s1.equals("") ? n1 + " + " : s1 + " + ");
		System.out.print(s2.equals("") ? n2 + " = " : s2 + " = ");
		System.out.println(s3.equals("") ? n1 + n2 : s3);
	}

}

正则表达式匹配

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static String check(String a, String b) {
        int n1 = 0, n2 = 0;
        boolean flag = false;
        StringBuilder sb = new StringBuilder();
        if (a.matches("\\d+")) {
            n1 = Integer.parseInt(a);
            if (n1 < 1 || n1 > 1000) {
                sb.append("? + ");
                flag = true;
            } else {
                sb.append(n1).append(" + ");
            }
        } else {
            sb.append("? + ");
            flag = true;
        }
        if (b.matches("\\d+")) {
            n2 = Integer.parseInt(b);
            if (n2 < 1 || n2 > 1000) {
                sb.append("? = ?");
            } else {
                sb.append(n2).append(" = ").append(flag ? "?" : n1 + n2);
            }
        } else {
            sb.append("? = ?");
        }
        return sb.toString();
    }

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String s = in.readLine();
        int indexOfSpace = s.indexOf(" ");
        String s1 = s.substring(0, indexOfSpace);
        String s2 = s.substring(indexOfSpace + 1);
        System.out.println(check(s1, s2));
    }
}

测试点3分析:

需要注意的是,使用 BufferedReader读取数据时不能使用split按空格来拆分字符串,因为题目要求

输入在一行给出AB,其间以空格分开

如果输入的数据存在多个空格,并且第一个空格的前后两个数字刚好符合要求,答案就错了

比如像这样

123 123 kjaksdj

就会返回123 + 123 = 246,正确的结果应该是123 + ? = ?

你可能感兴趣的:(java,算法)