数据结构JAVA 数制转换问题
- 提问者网友:低吟詩仙的傷
- 2021-05-10 21:38
将十进制数N转换为r进制的数,其转换方法利用辗转相除法:以N=3456,r=8为例转换方法如下:
N N / 8 (整除) N % 8(求余)
3467 433 3 低
433 54 1
54 6 6
6 0 6 高
所以:(3456)10 =(6563)8
我们看到所转换的8进制数按底位到高位的顺序产生的,而通常的输出是从高位到低位的,恰好与计算过程相反,因此转换过程中每得到一位8进制数则进栈保存,转换完毕后依次出栈则正好是转换结果。
算法思想如下:当N>0时重复1,2
1. 若 N≠0,则将N % r 压入栈s中 ,执行2;若N=0,将栈s的内容依次出栈,算法结束。
2. 用N / r 代替 N
<用泛型编程>
- 五星知识达人网友:掌灯师
- 2021-05-10 22:19
import java.util.ArrayList;
import java.util.List;
class Stack {
int idx = 0; //栈顶指针
private List<Integer> data = new ArrayList<Integer>(); //用ArrayList来保存堆栈数据
public void push(int n) {
//压栈
data.add(n);
idx++;
}
public int pop() {
//弹栈
idx--;
return data.get(idx);
}
public int getId() {
//获取栈顶指针
return idx;
}
}
public class Conversion {
private Stack stack = new Stack();
public static void main(String[] args) {
Conversion cs = new Conversion();
int x1 = 16;
int y1 = 16;
String rs = cs.convert(x1,y1);
System.out.println("The result is:"+rs);
}
public String convert(int x,int y) {
int num = 0;
String result = ""; //最终结果
if(x/y > 0) {
while(x/y > 0) {
stack.push(x%y);
x=x/y;
}
stack.push(x);//把最后一个数字压栈(即结果的第一位)
while(stack.idx > 0) {
num = stack.pop();
if(y == 16) {
switch(num) {
case 10:
result = result + "A";
break;
case 11:
result = result + "B";
break;
case 12:
result = result + "C";
break;
case 13:
result = result + "D";
break;
case 14:
result = result + "E";
break;
case 15:
result = result + "F";
break;
default:
result = result + num;
}
} else {
result = result + num;
}
}
return result;
} return Integer.toString(x);
}
}
不知道是不是楼主想要的,有什么问题可以联系我。其实在util包中有对堆栈的实现。还是自己写个好了。
水平有限难免代码不完善,欢迎指正!
- 1楼网友:空山清雨
- 2021-05-10 22:55