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.");
}
}
任务:找到合适的数据类型 样本输入:5
-150
150000
1500000000
213333333333333333333333333333333333
-100000000000000
示例输出:
-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
错误1:
error: cannot find symbol
int bitLength = number.bitlength();
^
错误2:
symbol: method bitlength()
location: variable number of type BigInteger
错误3:
error: cannot find symbol
if (bitLength <= Int.SIZE)
^
symbol: variable Int
location: class Solution
答案 0 :(得分:1)
逐行读取数字。使用BigInteger
计数位并将其除以8,以简化switch
个案例。看看下面的代码:
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.");
}
}
答案 1 :(得分:0)
错误:非法字符:\ 8211在每个If语句之前
要将此字符加入我们的代码\u8211
如果声明以及如何输入无法容纳在任何数据类型中的数字?
您需要使用可容纳和编号的数据类型。
试试这个。
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.
完成这个问题后,还有很多工作要做,但是使用BigInteger.bitLength()是更优雅的解决方案。
找不到符号if(bitLength&lt; = Int.SIZE)
Java中没有类型Int
,它是Integer
。
答案 2 :(得分:0)
您可以简单地将条件与数据类型范围放在一起,并检查输入数字是否属于哪种数据类型。
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();
}}
答案 3 :(得分: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.");
}
}
答案 4 :(得分: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.");
}
}
}
}