package code;
public class convert {
public int getPower(int power, int base){
int ans = 1;
for(int i=0; i<power; i++){
ans = ans * base;
}
return ans;
}
public int baseten (String s, int base){
int ret = 0;
for(int i = 0; i<s.length(); i++){
char cur = s.charAt(i);
if(base >= 0 && base <= 9){
int p = getPower(i, base);
int v = p * (cur - '0');
ret += v;
}
}
return ret;
}
}
这应该采用字符串和int并返回该数字的基数10值。例如(&#34; 1001&#34;,2)应该返回9.它目前给出了几个不同测试的错误答案,我不知道为什么。非常感谢!
答案 0 :(得分:0)
你以错误的顺序计算你的权力,给最后一个数字而不是第一个数字赋予最高权重。
实际上,您不需要计算每个数字的功率;相反,你可以直接乘以你的累加器:
for(int i = 0; i<s.length(); i++){
char cur = s.charAt(i);
if(base >= 0 && base <= 9){
ret = ret * base + (cur - '0');
}
}
这样做的方式与在纸上书写数字的方式相同。如果你写“10”,然后你写了另一个数字,那么这个数值变大十倍(或两倍,或者你的基数是什么)。你添加另一个数字,它会再次变为十(或两次,或其他)次。
我们必须直接考虑数十,数百和数千列的唯一原因是当我们大声读出十进制数字时,我们必须使用正确的单词。
答案 1 :(得分:-1)
由于你的二进制转换不是因为你得到了错误的结果 正确。因为当你的字符串字符
s[0]
基本权力 应为s.length()-1-i;
例如:
0101
作为输入if i = 0
然后0*2^3+
if i = 1
然后1*2^2+
if i = 2
0*2^1+
if i = 3
1*2^0
会产生结果:5
但在您的代码中,它会产生10。
在这里你必须声明一个名为j
int ret = 0,j = s.length()-1;
的新变量并将其初始化为string length()-1
,之后你必须将变量传递给getPower()
函数,如下所示:{{1 }}
包裹代码;
int p = getPower(j, base);
您也可以只用一行:
public class convert {
public int getPower(int power, int base){
int ans = 1;
for(int i=0; i<power; i++){
ans = ans * base;
}
return ans;
}
public int baseten (String s, int base){
int ret = 0,j = s.length()-1;
for(int i = 0; i<s.length(); i++,j--){
char cur = s.charAt(i);
if(base >= 0 && base <= 9){
int p = getPower(j, base);
int v = p * (cur - '0');
ret += v;
}
}
return ret;
}
}
它将产生二进制字符串的十进制值。