Java数据类型-黑客等级
我试图解决黑客等级的一个问题,所以我要做的是列出(代码的解释),我已经设法使代码运行和工作,但它失败了两个测试 这是我的密码Java数据类型-黑客等级,java,types,Java,Types,我试图解决黑客等级的一个问题,所以我要做的是列出(代码的解释),我已经设法使代码运行和工作,但它失败了两个测试 这是我的密码 import java.util.Scanner; public class JavaDatatypes { public static void main(String[] argh) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); for
import java.util.Scanner;
public class JavaDatatypes {
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:");
int[] bits = {8, 16, 32, 64};
String[] strings = {"byte", "short", "int", "long"};
for (int j = 0; j < bits.length; j++) {
long range = (long) (Math.pow(2, bits[j] - 1));
if (x >= -range && x <= range -1) {
System.out.println("* " + strings[j]);
}
}
//Complete the code
} catch (Exception e) {
System.out.println(sc.next() + " can't be fitted anywhere.");
}
}
}
}
import java.util.Scanner;
公共类JavaDatatypes{
公共静态void main(字符串[]argh){
扫描仪sc=新的扫描仪(System.in);
int t=sc.nextInt();
for(int i=0;i 如果(x>=-range&&x代码中的问题是使用了双功率(双a,双b)
。当结果接近长最大值时,结果是四舍五入的。您可以通过BIINTEGER
进行检查:
String str1 = BigInteger.valueOf(2).pow(bits[j] - 1).toString();
String str2 = String.valueOf((long)Math.pow(2, bits[j] - 1));
这些字符串每次都应该相等,但对于2^16
,情况并非如此。这就是为什么2^16
的x=Byte.MIN\u值&&x=Short.MIN\u值&&x=Integer.MIN\u值&&x>代码中的问题是使用了double-pow(double-a,double-b)
。当结果接近Long.MAX\u值时
-结果是四舍五入的。您可以通过bitineger
进行检查:
String str1 = BigInteger.valueOf(2).pow(bits[j] - 1).toString();
String str2 = String.valueOf((long)Math.pow(2, bits[j] - 1));
这些字符串每次都应该相等,但对于2^16
,情况并非如此。这就是为什么对于2^16
您的x=Byte.MIN\u值&&x=Short.MIN\u值&&x=Integer.MIN\u值&&x>忽略检查64位和long
如果long x=sc.nextLong();
成功,则您已经知道该数字适合long
类型。因此,如果没有异常,您始终可以打印“*long”
关于使用Math.pow()
:它基于浮点运算,因此可能涉及较小的舍入误差。2的幂可以通过位移位计算,因此
long range = (long) (Math.pow(2, bits[j] - 1))
可以用
long range = 2L << (bits[j] - 1)
long-range=2L只需省略对64位和long的检查即可
如果long x=sc.nextLong();
成功,则您已经知道该数字适合long
类型。因此,如果没有异常,您始终可以打印“*long”
关于使用Math.pow()
:它基于浮点运算,因此可能涉及较小的舍入误差。2的幂可以通过位移位计算,因此
long range = (long) (Math.pow(2, bits[j] - 1))
可以用
long range = 2L << (bits[j] - 1)
long-range=2L实际输出是什么?您试图用代码做什么?@dan1st因为您没有包括实际输出和输入(您只包括一个测试用例的输入)还有你的代码应该做什么。@dan1st我只包含了错误的输入。我们不需要更多的实际输出是什么?你想用你的代码做什么?@dan1st因为你没有包含实际的输出和输入(你只包含了一个测试用例的输入)还有你的代码应该做什么。@dan1st我只包含了错误的输入。我们不需要更多的输入。我宁愿按照我的方式来做,我只是想在我的代码中找到问题。@SamHoque添加了注释,使用bigigger修复了它,奇怪的是math.pow不起作用。我宁愿按照我的方式来做,我只是想在我的代码中找到问题。@SamHoque添加了注释,使用bigigger修复了它,奇怪的是math.pow不起作用。返回运算符“在2L中没有double
返回运算符”在2L中没有double