JAVA的一道程序题,新手高分求助……(核心算法已经解决,求输入输出及异常处理)

问题描述:
同一个数会由于采用不同的基数而使得其表现的形式是完全不一样的,在我们的学习中,我们熟悉的基数有10进制、12进制、60进制、2进制、8进制和16进制。比如数据12,如果我们用2进制表示,则它就是1100;如果用3进制表示就是110;如果用8进制表示则是14。我们的编程任务就是与数的进制(也就是基数)有关。
程序中我们会给大家很多个数对(假设每个数对的数用X和Y表示),程序需要解决的问题就是为X和Y各选择一个最小的基数,以使得这两个数在其选择的基数上是一对相等的数。
例如,12和5这个数对,我们可以为12选择基数3,为5选择基数6,这样一来12(base 3)=5(base 6),因为12(base 3)就是10进制数5,而5(base 6)也是10进制数中的5。
输入:
程序的输入是通过文件完成的。
文件中的每一行都包含一个数对X和Y,两个数通过一个或多个空格符分割,与X和Y相关联的有效基数值范围为2~36。X和Y的合理数值表示字符包括0—9和A-Z(表示数值10-35)。
文件的最后一行用一个数字0表示输入的结束。
样例输入文件(base.in)
12 5
10 A
12 34
123 456
1 2
10 2
0
输出:
结果应该存放在一个文件中,该文件中的每一行对应为输入文件中相应的那行数对,输出的格式按照下面的示例文件即可。
样例输出文件(base.out)
12 (base 3) = 5 (base 6)
10 (base 10) = A (base 11)
12 (base 17) = 34 (base 5)
123 is not equal to 456 in any base 2..36
1 is not equal to 2 in any base 2..36
10 (base 2) = 2 (base 3)
大家请直接给出代码,核心算法在API的Integer.parseInt中有,所以不需要,只求个文件输入输出及同时进行的异常处理即可,多谢了,如果可以运行的话我会追加分数的

 
 
 
比如:

import java.io.*;

class C {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("base.in"));
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("base.out")), true);

        outmost:
        for (String line; (line = br.readLine()) != null; ) {
            String[] nums = line.split("\\s+");
            if (nums.length == 1 && Integer.parseInt(nums[0]) == 0)
                break;

            for (int rdx0 = 2; rdx0 <= 36; rdx0++)
                for (int rdx1 = 2; rdx1 <= 36; rdx1++)
                    try {
                        if (Integer.parseInt(nums[0], rdx0) == Integer.parseInt(nums[1], rdx1)) {
                            out.printf("%s (base %s) = %s (base %s)%n", nums[0], rdx0, nums[1], rdx1);
                            continue outmost;
                        }
                    } catch (NumberFormatException e) { /* 不必做什么 */ }

            out.printf("%s is not equal to %s in any base 2..36%n", nums[0], nums[1]);
        }
    }
}
 
 
 
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-10-11
。。看着挺难
相似回答
大家正在搜