java - Java 数据类型 - 黑客排名
问题描述
我正在尝试解决有关黑客等级的问题,所以我必须在此处列出我必须做的事情(代码解释),并且我已经设法使代码运行和工作,但它没有通过 2 次测试。
这是我的代码。
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.");
}
}
}
}
我查看了预期的输出,它预计9223372036854775807
会输出很长,而我的代码没有输出很长,我不知道为什么。
解决方案
只需省略对 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)
这给出了准确的结果,也比Math.pow()
.
推荐阅读
- google-chrome-devtools - 如何在 Chrome DevTools 配置文件选项卡中按事件类型进行过滤,例如查看鼠标点击?
- mysql - 由于 mysql 错误“PROTOCOL_PACKETS_OUT_OF_ORDER”,节点应用程序崩溃
- linux - systemd-cryptsetup:遇到未知的 /etc/crypttab 选项 '_netdev'
- javascript - 当用户进入页面时显示一个弹出窗口
- python - 如何在vs代码中激活conda环境
- flutter - 如何将小部件 A 放在中心,将小部件 B 放在边缘?
- node.js - 如何访问使用 gatsby-plugin-nodejs 提供的 Gatsby 构建文件中的环境变量
- weka - 即使在离散化值之后,Apriori 中的开始按钮也被禁用
- spring-boot - 如何将照片插入数据库?
- python - 如何在熊猫中使用多列向后应用滚动功能?