Java 不需要将二进制转换为十进制的输出?

Java 不需要将二进制转换为十进制的输出?,java,string,Java,String,给定一个二进制数作为输入,将其转换为10进制(十进制)。请注意,要将数字100111从二进制转换为十进制,其值为1*2^5+0*2^4+0*2^3+1*2^2+1*2^1+1*2^0。还要注意这里的5是二进制数的长度 MyApproach 要转换为十进制,我首先将代码从字符串转换为十进制。然后我求解数字,直到它大于0,并求解表达式 例如,对于数字10=0*2^0+1*2^1,求出了代码中的表达式 我在最后一个测试用例中得到了错误的Ans。 有人能告诉我我的密码有什么问题吗 下面是我的代码: pu

给定一个二进制数作为输入,将其转换为10进制(十进制)。请注意,要将数字100111从二进制转换为十进制,其值为1*2^5+0*2^4+0*2^3+1*2^2+1*2^1+1*2^0。还要注意这里的5是二进制数的长度

MyApproach

要转换为十进制,我首先将代码从字符串转换为十进制。然后我求解数字,直到它大于0,并求解表达式

例如,对于数字10=0*2^0+1*2^1,求出了代码中的表达式

我在最后一个测试用例中得到了错误的Ans。 有人能告诉我我的密码有什么问题吗

下面是我的代码:

public int convert(String binary)
{
int p=0;
int decimal=0;

int number=Integer.parseInt(binary);
while(number>0)
{
  int temp = number%10;
     decimal += temp*Math.pow(2, p);
     number = number/10;
     p++;
  //write your code here

 }
 return decimal;
} 
}

Parameters     ActualOutput      ExpectedOutput

'10011010010'    null             1234

您的输入超出了Java中的
int
限制,即
2147483647
。 即使将其更改为
long
,也无法转换
10000000000000000000000
以上的值(十进制值等于
262144
)。最好的解决方案是逐字符计算,而不转换整个字符串

那么,试试下面的代码

public static long convert(String binary) {
    long pow = 1, decimal = 0;
    for (int i = (binary.length() - 1); i >= 0; i--) {
        if (binary.charAt(i) == '1') {
            decimal += pow;
        }
        pow *= 2;
    }
    return decimal;
}
整数的最大值为(2^31-1),并且从字符串中解析为int的值大于该值。因此,尝试使用Long代替int。。 下面的代码工作正常。。请在下面核对

public static int convert(String binary)
    {
    int p=0;
    int decimal=0;

    long number=Long.parseLong(binary);
    while(number>0)
    {
      long temp = number%10;
         decimal += temp*Math.pow(2, p);
         number = number/10;
         p++;
      //write your code here

     }
     return decimal;
    }  

为什么先把它转换成十进制?这很容易:

   public static void main( String[] args ) {
      String str = "10011010010";
      int len = str.length();
      long mult = 1;
      long val = 0;
      for (int i = len - 1; i >= 0; i--) {
         if ( str.charAt( i ) == '1' ) {
            val += mult;
         }
         mult *= 2;
      }
      System.out.println( val );
   }
更简单,没有pow:

int s=binary.length();

for (int pos=0;pos<s;pos++)
{
char c=binary.charAt(pos);
if (c=='1') decimal+=1;
if (pos<s-1) decimal*=2;
}
ints=binary.length();

对于(int pos=0;pos)你能不能不按原样使用二进制字符串并使用
charAt
?好吧,你还没有展示你是如何提出“ActualOutput”的。请发布一个。我个人会将字符串视为字符数组,然后使用(长度-位置)循环通过该数组作为2的幂。在Java中,默认情况下,int数据类型是一个32位带符号2的补码整数,最小值为-2^31,最大值为(2^31)-1。将字符串转换为int时,您超出了此范围。您可以将其解析为
long
或实现类似@DBug的功能(如果我处在你的位置,我会这么做)我的问题:在我写的代码中,要做哪些更改