将字符串中的数字转换为基数为10的数字

时间:2016-02-13 18:07:16

标签: java string int base

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.它目前给出了几个不同测试的错误答案,我不知道为什么。非常感谢!

2 个答案:

答案 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;
    }
}

它将产生二进制字符串的十进制值。