我正在尝试编写一个程序,该程序采用非负八进制数,最大值为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());
}
}
答案 0 :(得分:1)
这个问题已经得到了回答,但是有一件事需要补充。
我知道有一些"领先的零"在转换过程中可能遇到的问题。
这不会有问题。前导零仅与源代码中的Java文字相关。 (前导零表示"八进制" ...)
顺便说一下,你可以将一个大的八进制数字(表示为字符)转换为十六进制,反之亦然,而不转换为BigInteger
或BigDecimal
(或等效的)。但是你需要从数字字符串的最不重要(最右边)开始,或者你需要知道数字字符串中有多少个字符。
答案 1 :(得分:0)
尝试一个包含大量数字的八进制数字。您的输入最多可以为2000000. Java Long is only a 64-bit signed number。
您不能将足够大的八进制数放入任何Java基本类型中,因此您需要一种完全不同的方法。
一种方法是读取8个八进制数字(24位)的组,并将它们转换为6个十六进制数字的组。
或者查看this answer了解有关BigInteger和BigDecimal的更多信息。