【发布时间】:2015-11-17 09:48:40
【问题描述】:
我正在研究这个八进制到十进制的转换器:
public int getDecimal(String input)
{
int output = 0;
// reverse input so that it is easier to work with
input = new StringBuilder(input).reverse().toString();
for (int c = 0; c < input.length(); c++)
{
// check for invalid digit
if (input.charAt(c) < '0' || input.charAt(c) > '7')
return 0;
if (input.charAt(c) != '0')
{
if (input.charAt(c) == '1')
output += Math.pow(8, c);
else // if it's greater than 1
output += Math.pow(8, c) + input.charAt(c) - 1;
}
}
return output;
}
它适用于大约 65% 的测试用例,例如将“10”转换为“8”。但是,它不适用于其他情况,例如将“17”转换为“15”。我做错了什么?
【问题讨论】:
-
您的方法似乎没有采用
input参数。 -
要获得 8^c,请使用
1 << (c*3)而不是pow,这要慢得多 -
我的方法现在有一个
input参数。