什么是会使以下程序失败的八进制到十六进制测试用例?

What would be a octal to hex test case that would fail the following program?

我正在尝试编写一个程序,该程序接受一个非负八进制数,最大值为 8 的 200000 次方。输入不会有任何前导零,输出也不能包含任何额外的前导零。我想不出一个测试用例会失败,但它肯定不会作为正确答案通过。因此,我错过了一个边缘案例,我想知道是哪一个。我知道在此转换过程中可能会遇到一些 "leading zeroes" 问题,但我不完全理解它的含义,因此无法看到问题/想出解决方案。

import java.util.*;
import java.io.*;

public class arithmetic{
    public static void main(String[] args) throws Exception{
        InputStreamReader ir = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(ir);
        String octal = br.readLine();
        if(octal == null){
            System.out.println("0");
            return;
        }

        long decimal = Long.parseLong(octal,8);
        System.out.println(Long.toHexString(decimal).toUpperCase());

    }
}

试试有很多很多位的八进制数。您的输入最多可以有 2000000 个。A Java Long is only a 64-bit signed number.

您不能将足够大的八进制数放入任何 Java 基本类型中,因此您需要一种完全不同的方法。

一种方法是读取一组 8 个八进制数字(24 位)并将它们转换为一组 6 个十六进制数字。

或查看 this answer 以了解有关 BigInteger 和 BigDecimal 的更多信息。

这个问题大部分已经回答了,但他们还有一件事需要补充。

I am aware that there are some "leading zeroes" problems that could be encountered during this conversion.

不会有问题的。前导零仅与源代码中的 Java 文字相关。 (前导零表示 "octal" ...)


顺便说一下,您 可以 将一个大的八进制数(表示为字符)转换为十六进制,反之亦然,而无需转换为 BigIntegerBigDecimal (或同等学历)。但是您需要从数字字符串的最低有效(最右)端开始,或者您需要知道数字字符串中有多少个字符。