Jason arora
Jason arora

Reputation: 550

Output of converting binary to Decimal not expected?

Given a binary number as input convert it into base 10 (decimal system). Note that to convert a number 100111 from binary to decimal, the value is 1*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 1*2^1+ 1*2^0. Also note that 5 here is the length of the binary number.

MyApproach

To convert to decimal,I first converted the code from String to decimal.Then I solved the number till it is greater than 0 and solved the expression.

For example for number 10=0*2^0+1*2^1 and solved the expression in the code.

I am getting a wrong Ans on the last test case. Can anyone guide me what is wrong in my code.?

Below is my code:

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

Upvotes: 0

Views: 277

Answers (4)

Msp
Msp

Reputation: 2493

Your input is above the limit of int in Java, which is 2,147,483,647. Even if if you change it to long, you won't be able to convert values above 1000000000000000000 (which is equal to 262144 in decimal). Best solution is to calculate by taking character by character without converting the whole string.

So, try the following code,

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

Upvotes: 0

Simpler, without 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;
}

Upvotes: 1

FredK
FredK

Reputation: 4084

Why convert it to decimal first? This is quite easy:

   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 );
   }

Upvotes: 0

kaushik
kaushik

Reputation: 312

Max value of integer is (2^31-1) and the value that you are parsing to int from string in greater than that. Hence try to use Long in place of int .. below code is working fine.. please check it below..

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

Upvotes: 1

Related Questions