2016-02-13 69 views
-1
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。例如(“1001”,2)应该返回9.它目前给了我几个不同的测试的错误答案,我不知道为什么。非常感谢!将字符串中的数字转换为基数为10的数字

+4

'Integer.parseInt(s,base)'? – assylias

+0

好的@assylias –

+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”,然后你在那之后再写一个数字,那么这个值会变大10倍(或者两次,或者无论你的基数是多少)。你添加另一个数字,它再次得到十(或两次,或其他)的时间。

我们必须直接思考数十和数百以及数千列的唯一原因是当我们大声朗读十进制数字时,我们必须使用正确的单词。

-1

你得到错误的结果只是因为你的二进制转换不是 正确。因为当你的字符串的字符s[0]基本功率 应s.length()-1-i;

例如:0101输入if i = 0然后0*2^3+if i = 1然后 1*2^2+if i = 20*2^1+if i = 31*2^0它产生的结果是: 5

但在你的代码将会产生10.

在这里,你必须声明称J int ret = 0,j = s.length()-1;新变量之后,它初始化为string length()-1您必须将变量传递给getPower()功能是这样的: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; 
    } 
} 

你也可以做到这一点的只有一行:

int decimalVal = Integer.parseInt("0010101010",2); 

它会产生二进制串的十进制值。