【问题标题】:Converting numbers in string to base 10 number [duplicate]将字符串中的数字转换为以 10 为底的数字 [重复]
【发布时间】:2016-05-24 19:57:50
【问题描述】:
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。它目前在几个不同的测试中给了我错误的答案,我不知道为什么。非常感谢!

【问题讨论】:

  • Integer.parseInt(s, base) ?
  • 对否决票有什么解释吗?
  • @ProsenGhosh 我敢打赌这是因为我们没有说“使用库函数”。
  • 但我认为他并没有要求库函数。没关系,我投反对票,但对投反对票的解释可以让我更有意识。 :)
  • @ProsenGhosh SO 不是为了学习。这是为了找到复制粘贴的解决方案,让你的老板不再为截止日期而烦恼。

标签: java string int base


【解决方案1】:

你以错误的顺序计算你的力量,把最高的权重放在最后一位而不是第一位。

其实你不需要计算每个数字的幂;相反,您可以直接将累加器相乘:

for(int i = 0; i<s.length(); i++){
    char cur = s.charAt(i);
    if(base >= 0 && base <= 9){
        ret = ret * base + (cur - '0');
    }
}

这样做的效果与在纸上写数字时一样。如果你写“10”,然后你写另一个数字,那么这个值会变大十倍(或两倍,或者你的底数是多少)。您添加另一个数字,它会再次增加十倍(或两倍,或其他)。

我们必须直接考虑数十、数百和数千列的唯一原因是当我们大声读出一个十进制数字并且我们必须使用正确的单词时。

【讨论】:

    【解决方案2】:

    你得到错误的结果只是因为你的二进制转换不是 正确的。因为当你的字符串字符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() 函数,如下所示: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);
    

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

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 2023-03-29
      • 1970-01-01
      • 2019-10-27
      • 2016-09-06
      • 2014-11-15
      相关资源
      最近更新 更多