为什么我的八进制到十进制转换器不适用于某些情况?

时间:2015-08-24 04:19:13

标签: java binary octal

我正在研究这个八进制到十进制转换器:

$('.myDiv').load('urlToGetUpdatedContent');

适用于大约65%的测试用例,例如将“10”转换为“8”。但是,它不适用于其他情况,例如将“17”转换为“15”。我做错了什么?

5 个答案:

答案 0 :(得分:2)

你的公式错了。

你在这一行做什么,

.drop-down {
    display: block;
    -webkit-appearance: none;  /*REMOVES DEFAULT CHROME & SAFARI STYLE*/
    -moz-appearance: none;  /*REMOVES DEFAULT FIREFOX STYLE*/
    border: 0 !important;  /*REMOVES BORDER*/
    margin-top: .5em;
    color: white;
    font-size:1em;
    padding: .4em 2em .4em .6em;
    cursor: pointer;
    background-size: 1em;
    background: $formever_blue url(dropdown_arrow.png) no-repeat;
    background-position-x: calc(100% - 0.5em);
    background-position-y: center;
}
.download-form .drop-down {
    font-size: 2em;
    width: 100%;
}

应该更像是,

output += Math.pow(8, c) + input.charAt(c) - 1;

赞,output += Math.pow(8, c) * (input.charAt(c) - '0');

答案 1 :(得分:1)

你需要记住那些" 17"意思是:1 * 8 + 7.你的算法错了。你不需要扭转字符串。对于通过循环的每次迭代,只需将前一个output值乘以基数(在本例中为8)并添加下一个数字的值。继续直到字符串结束。

答案 2 :(得分:0)

您可以使用:

input = new StringBuilder(input).reverse().toString();

System.out.println("input:"+input);

for (int c = 0; c < input.length(); c++) {
    output += Integer.parseInt(input.charAt(c) + "") * Math.pow(8, c);

    System.out.println("output:" + output);
}

答案 3 :(得分: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;
}

这里至少有两个漏洞。您可以将所有这些减少到

output = output*8+input.charAt(c)-'0';
摆脱逆转步骤后。不要担心0和1的特殊情况。

答案 4 :(得分:0)

你也可以试试这个,不需要反转字符串:

public static int getDecimal() {
    int output = 0;
    String input="17"; //by example
    int c=input.length();
    int i=0;
    while(c > 0) {
        if (input.charAt(i) < '0' || input.charAt(i) > '7') {
            return 0;
        }
        output += Math.pow(8, c-1) * Integer.parseInt(input.charAt(i++)+"");
        c--;
    }
    return output;
}