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



我正在尝试编写一个程序,该程序接受一个最大为 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());
}
}

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

你不能在任何Java基本类型中加入一个足够大的八进制数字,所以你需要一种完全不同的方法。

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

或者查看这个答案,了解更多关于BigInteger和BigDecimal的信息。

这个问题已经基本回答了,但他们有一件事需要添加。

我知道在此转换过程中可能会遇到一些"前导零"问题。

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


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

最新更新