我正在研究这个八进制到十进制转换器:
$('.myDiv').load('urlToGetUpdatedContent');
适用于大约65%的测试用例,例如将“10”转换为“8”。但是,它不适用于其他情况,例如将“17”转换为“15”。我做错了什么?
答案 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;
}