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)推送。对其他基执行适当的算法。你是否有一个英文的算法或伪代码,你不知道如何将其转换成代码?你的意思是否与你在标题中所说的完全一致?也就是说,从十进制转换为二进制,然后从二进制转换为八进制,再从八进制转换为十六进制?如果是,为什么?