关于java:什么是八进制到十六进制测试用例会失败以下程序?

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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());

    }
}


这个问题已经得到了回答,但是有一件事需要补充。

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

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

顺便提一下,您可以将大八进制数(表示为字符)转换为十六进制,反之亦然,而不转换为BigIntegerBigDecimal(或等效)。但是你需要从数字字符串的最不重要(最右边)结束开始,或者你需要知道数字字符串中有多少个字符。


尝试一个包含大量和大量数字的八进制数。您的输入最多可以为2000000. Java Long只是一个64位有符号数。

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

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

或者在BigInteger和BigDecimal上查看这个答案。