Java 如何使用堆栈进行十进制到二进制到八进制到十六进制的转换?
以下是我已经编写的代码:Java 如何使用堆栈进行十进制到二进制到八进制到十六进制的转换?,java,stack,Java,Stack,以下是我已经编写的代码: import java.util.Stack; import java.util.Scanner; public class Conversion { public static void main(String[] args) { Stack<Integer> s = new Stack<>(); Scanner sc = new Scanner(System.in); System.out.println(
import java.util.Stack;
import java.util.Scanner;
public class Conversion {
public static void main(String[] args) {
Stack<Integer> s = new Stack<>();
Scanner sc = new Scanner(System.in);
System.out.println("Enter a Number:");
int numb =sc.nextInt();
while(numb!=0){
int bin = numb%2;
s.push(bin);
numb /=2;
}
System.out.println("Binary:");
while(!(s.isEmpty())){
System.out.print(s.pop());
}
System.out.println();
}
}
import java.util.Stack;
导入java.util.Scanner;
公共类转换{
公共静态void main(字符串[]args){
堆栈s=新堆栈();
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入一个数字:”);
int numb=sc.nextInt();
while(麻木!=0){
int bin=numb%2;
s、 推(箱);
麻木/=2;
}
System.out.println(“二进制:”);
而(!(s.isEmpty()){
System.out.print(s.pop());
}
System.out.println();
}
}
我的问题已经在我的问题中了,正如您在这里看到的,我已经进行了二进制转换,我不知道如何开始堆栈需要在弹出之前进行克隆,因为一旦弹出堆栈,堆栈就会变为空
import java.util.Stack;
import java.util.Scanner;
public class Conversion {
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
Scanner sc = new Scanner(System.in);
System.out.println("Enter a Number:");
int numb = sc.nextInt();
while (numb != 0) {
int bin = numb % 2;
s.push(bin);
numb /= 2;
}
Stack<Integer> st = (Stack<Integer>) s.clone(); // Added this line
System.out.println("Binary:");
while (!(s.isEmpty())) {
System.out.print(s.pop());
}
System.out.println();
System.out.println("Octal: "
+ changeBase((Stack<Integer>) st.clone(), 8)); // Added this line
System.out.println("Hexadecimal: "
+ changeBase((Stack<Integer>) st.clone(), 16)); // Added this line
}
public static String changeBase(Stack<Integer> st, int base) {
StringBuilder result = new StringBuilder();
int length = st.size();
int bitsPerDecimal = 0, base_copy = base;
while (base_copy > 1) {
base_copy /= 2;
++bitsPerDecimal;
}
int padding = bitsPerDecimal - (length % bitsPerDecimal); // make size of stack multiple of bitsPerDecimal
for (int i = 0; i < padding; ++i) {
st.push(0);
}
while (!st.empty()) {
int no = 0, pow = base;
for (int i = 0; i < bitsPerDecimal; ++i) { // Get the required bits to make a digit
pow /= 2;
no = no + pow * st.pop();
}
if (no > 9)
result.append((char) ('A' + (no - 10)));
else
result.append(Integer.toString(no));
}
return result.toString();
}
}
import java.util.Stack;
导入java.util.Scanner;
公共类转换{
公共静态void main(字符串[]args){
堆栈s=新堆栈();
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入一个数字:”);
int numb=sc.nextInt();
while(麻木!=0){
int bin=numb%2;
s、 推(箱);
麻木/=2;
}
Stack st=(Stack)s.clone();//添加了此行
System.out.println(“二进制:”);
而(!(s.isEmpty()){
System.out.print(s.pop());
}
System.out.println();
System.out.println(“八进制:
+changeBase((Stack)st.clone(),8));//添加了此行
System.out.println(“十六进制:”
+changeBase((Stack)st.clone(),16));//添加了此行
}
公共静态字符串changeBase(Stack st,int base){
StringBuilder结果=新建StringBuilder();
整数长度=标准尺寸();
int bitsPerDecimal=0,base\u copy=base;
而(基本副本>1){
基本拷贝/=2;
++双螺旋体;
}
int padding=bitsPerDecimal-(长度%bitsPerDecimal);//使堆栈大小为bitsPerDecimal的倍数
for(int i=0;i9)
追加((char)('A'+(no-10));
其他的
result.append(Integer.toString(no));
}
返回result.toString();
}
}
System.out.printf(“二进制:%s%n”,Integer.toBinaryString(numb))代码>那么我如何实现另外2个,即八进制和十六进制,只使用stacksWhy?还有toOctalString(int)
和toHexString(int)
。您演示了如何在堆栈上执行二进制(除以2)推送。对其他基执行适当的算法。你是否有一个英文的算法或伪代码,你不知道如何将其转换成代码?你的意思是否与你在标题中所说的完全一致?也就是说,从十进制转换为二进制,然后从二进制转换为八进制,再从八进制转换为十六进制?如果是,为什么?