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

时间:2018-06-10 04:17:08

标签: java hex octal

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

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());

    }
}

2 个答案:

答案 0 :(得分:1)

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

  

我知道有一些"领先的零"在转换过程中可能遇到的问题。

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

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

答案 1 :(得分:0)

尝试一个包含大量数字的八进制数字。您的输入最多可以为2000000. Java Long is only a 64-bit signed number

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

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

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