如何通过单个十进制输入同时得到二进制、八进制、十六进制输出?
问题解答:单输入实现多进制转换
嘿,我来帮你把这个问题理清楚~
你猜的完全没错!问题核心就在于第一个while循环直接修改了变量i的取值。在循环里你执行了i /= 2,这个操作会不断把i的值缩小,直到i变成0才会退出循环。等你想转八进制的时候,i已经是0了,再用它做计算自然得不到正确结果。
接下来给你两种简单的解决方案,满足你“单输入得到三种进制输出”的需求:
方案1:保存原始输入值
在第一次转换前,把用户输入的原始值存到一个临时变量里,之后所有转换都用这个临时变量的副本操作,避免修改原始输入值:
import java.util.Scanner; public class LA { public static void main(String[] args) { Scanner scn = new Scanner(System.in); int original = scn.nextInt(); // 保存原始输入值,不修改它 // 二进制转换 int i = original; String binary = ""; while (i > 0) { binary = (i % 2) + binary; i /= 2; } System.out.println("b " + binary); // 八进制转换 int o = original; String octal = ""; while (o > 0) { octal = (o % 8) + octal; o /= 8; } System.out.println("o " + octal); // 十六进制转换(处理10-15对应a-f的情况) int h = original; String hex = ""; while (h > 0) { int remainder = h % 16; char c = remainder < 10 ? (char)('0' + remainder) : (char)('a' + remainder - 10); hex = c + hex; h /= 16; } System.out.println("h " + hex); } }
方案2:使用Java内置的进制转换方法
Java已经帮我们封装好了现成的进制转换工具,不用自己写循环,代码更简洁高效,非常适合初学者:
import java.util.Scanner; public class LA { public static void main(String[] args) { Scanner scn = new Scanner(System.in); int num = scn.nextInt(); // 直接调用内置方法完成转换 String binary = Integer.toBinaryString(num); String octal = Integer.toOctalString(num); String hex = Integer.toHexString(num); // 按照要求的格式输出 System.out.println("b " + binary); System.out.println("o " + octal); System.out.println("h " + hex); } }
测试输入2017的话,两种方案都会输出:
b 11111100001 o 3741 h 7e1
内容的提问来源于stack exchange,提问作者nyang
相关产品推荐
相关产品推荐

