Finding the appropriate Java Datatype
Asked Answered
R

5

6
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    while (input.hasNextLine()) {
        BigInteger number = new BigInteger(input.nextLine());

        int bitLength = number.bitlength();
        if (bitLength <= Bytes.SIZE)
            System.out.println("\u8211 byte");
        if (bitLength <= Short.SIZE)
            System.out.println("\u8211 short");
        if (bitLength <= Int.SIZE)
            System.out.println("\u8211 int");
        if (bitLength <= Long.SIZE)
            System.out.println("\u8211 long");

        if (bitLength > Long.SIZE)
            System.out.println(number + " can't be fitted anywhere.");
    }
} 

Task : to find a suitable data type Sample Input :5

-150
 150000
 1500000000
 213333333333333333333333333333333333
-100000000000000

Sample Output :

-150 can be fitted in:
short
int
long

150000 can be fitted in:
int
long

1500000000 can be fitted in:
int
long
213333333333333333333333333333333333 can't be fitted anywhere.

-100000000000000 can be fitted in:
long

Error 1:

error: cannot find symbol
    int bitLength = number.bitlength();
                      ^

Error 2:

symbol:   method bitlength()
location: variable number of type BigInteger

Error 3:

error: cannot find symbol
    if (bitLength <= Int.SIZE)
                 ^
    symbol:   variable Int
    location: class Solution
Romaineromains answered 8/6, 2015 at 7:15 Comment(5)
int number = input.nextInt(); can't return something bigger than intVacation
It was bitLength not bitlength, I have fixed this in my answer.Crowd
Don't post the whole solution here as it will make it too easy for other people to just copy your solution. You should leave enough here to solve one piece of the problem i.e. your original question of how to count the number of bit required.Crowd
The integer object type is java.lang.Integer, not Int.Culinarian
@SandeepGV Isn't the whole idea of solving problems on sites like hackerrank to actually figure them out by yourself and learn from it?Aftmost
R
1

Read the number line by line. Count bit using BigInteger and divide it by 8 for switch case simplification. Have a look at below code:

    Scanner input = new Scanner(new File("so/input.txt"));
    while (input.hasNextLine()) {
        BigInteger number = new BigInteger(input.nextLine().trim());
        int bitLength = number.bitLength();
        int len = bitLength / 8;
        StringBuilder output = new StringBuilder(number.toString() + " can be fitted in:\n");
        switch (len) {
            case 0:
                output.append(" byte");
            case 1:
                output.append(" short");
            case 2:
            case 3:
                output.append(" int");
            case 4:
            case 5:
            case 6:
            case 7:
                output.append(" long");
                System.out.println(output);
                break;
            default:
                System.out.println(number.toString() + "  can't be fitted anywhere.");
        }
    }
Reliquary answered 8/6, 2015 at 8:14 Comment(0)
C
0

Error :illegal character: \8211 before every If statement

To put this character in you code us \u8211

If statement and how will take input of the number which can't be accommodated in any data type ?

You need to use a datatype which can accommodated and number.

Try this instead.

while (input.hasNextLine()) {
    BigInteger number = new BigInteger(input.nextLine());

    int bitLength = number.bitLength() + 1;
    if (bitLength <= Bytes.SIZE)
         System.out.println(" \u8211 byte");

    if (bitLength <= Short.SIZE)
         System.out.println(" \u8211 short");

    // more checks.

    if (bitLength > Long.SIZE)
        // too big.

Having done the problem, there is plenty more to do to get this to work but using BigInteger.bitLength() is the more elegant solution.

cannot find symbol if (bitLength <= Int.SIZE)

There is no type Int in Java, it is Integer.

Crowd answered 8/6, 2015 at 7:24 Comment(0)
I
0

You can simply put the conditions with the range of data types and check whether the input number falls in which data type.

    class FindDataType {
public static void main(String[] argh) {
    Scanner sc = new Scanner(System.in);
    //no. of input values
    int t = sc.nextInt();
    for (int i = 0; i < t; i++) {
        try {
            //Take input as long data type
            long x = sc.nextLong();
            System.out.println(x + " can be fitted in:");
            //Putting conditions to check the data type
            if (x >= -128 && x <= 127) {
                System.out.println("* byte");
                System.out.println("* short");
                System.out.println("* int");
                System.out.println("* long");
            } else if (x >= -32768 && x <= 32767) {
                System.out.println("* short");
                System.out.println("* int");
                System.out.println("* long");
            } else if (x >= -2147483648 && x <= 2147483647) {
                System.out.println("* int");
                System.out.println("* long");
            } else if (x >= -9223372036854775808l
                    && x <= 9223372036854775807l) {
                System.out.println("* long");
            }
        } catch (Exception e) {
            //Printing exception if no data type matches.
            System.out.println(sc.next() + " can't be fitted anywhere.");
        }

    }
    sc.close();
}}
Impendent answered 29/9, 2016 at 16:9 Comment(0)
C
0
  int t = sc.nextInt();
  for (int i = 0; i < t; i++) {
      BigInteger x = sc.nextBigInteger();
      int bitLength = x.bitLength() + 1;
      StringBuilder output= new StringBuilder(x.toString() + " can be fitted in:\n");
      if (bitLength <= Byte.SIZE)
          output.append("* byte\n");
      if (bitLength <= Short.SIZE)
          output.append("* short\n");
      if (bitLength <= Integer.SIZE)
          output.append("* int\n");
      if (bitLength <= Long.SIZE)
          output.append("* long\n");

      if (output.subSequence(output.indexOf(":"),output.length()-1).length() >    1) {
          System.out.print(output);

      } else {
          System.out.println(x + " can't be fitted anywhere.");
      }
  }
Caricature answered 5/3, 2019 at 7:10 Comment(0)
C
0
import java.util.*;
import java.io.*;

class Solution {
  public static void main(String[] argh) {
    Scanner sc = new Scanner(System.in);
    int t = sc.nextInt();

    for (int i = 0; i < t; i++) {

        try {
            long x = sc.nextLong();
            System.out.println(x + " can be fitted in:");
            if (x >= -128 && x <= 127) System.out.println("* byte");
            if (x >= -(Math.pow(2, 15)) && x <= (Math.pow(2, 15) - 1)) System.out.println("* short");
            if (x >= -(Math.pow(2, 31)) && x <= (Math.pow(2, 31) - 1)) System.out.println("* int");
            if (x >= -(Math.pow(2, 63)) && x <= (Math.pow(2, 63) - 1)) System.out.println("* long");

        } catch (Exception e) {
            System.out.println(sc.next() + " can't be fitted anywhere.");
        }
    }
  }
}
Collettecolletti answered 10/5, 2019 at 4:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.