Reputation: 233
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
Upvotes: 6
Views: 2523
Reputation: 5
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.");
}
}
}
}
Upvotes: 0
Reputation: 1
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.");
}
}
Upvotes: 0
Reputation: 36
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();
}}
Upvotes: 0
Reputation: 21971
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.");
}
}
Upvotes: 1
Reputation: 533680
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
.
Upvotes: 0