JAVA实现10进制的数转化为任意n进制的数
来源:互联网 发布:像堆糖一样的软件 编辑:程序博客网 时间:2024/05/20 12:23
我们仔细想想,要实现10进制数转化为任意n进制的数,其实是可以用栈来实现的。
根据计算机的进制转换知识我们知道,10进制数num转化为n进制(比如n=2),我们就是先进行num % n 操作,余数不断的除以2,直到余数为零。然后把商按照从下到上的顺序排列。(具体怎么算大家都会)。我要说的是这个商可以用栈保存起来。根据栈的先进后出原则,我们就可以把这个二进制数打印出来。
需要进行的步骤是:
1、自己实现栈的功能。(当然可以用现成的库函数,但自己练习写一下也不错)
2、写个进制转化的函数实现数制之间的转换。
现在我们就一步步来做。
先实现栈
定义接口:
package com.guobing.stack;@SuppressWarnings("hiding")public interface Stack_Interface<Object> {public void initStack(); //这个方法貌似可以不要,后面再看看public void push(Object obj); //向栈顶插入一个元素public boolean isEmpty(); //判断是否为空public Object peek(); //返回栈顶元素的值public Object pop(); //从栈中删除栈顶元素并返回public void clear(); //清除栈中的所有元素使之成为一个空栈public void print(); //打印栈中的元素}实现接口
package com.guobing.stack;/** * @topic 栈的链表实现 * @author guobbing * @version 1.1 * @since 12:33 */public class LinkedStack implements Stack_Interface{public Node top; //定义栈顶指针/** * 清除栈中的元素,使之成为空栈 */@Overridepublic void clear() { top = null;}/** * 初始化栈 */@Overridepublic void initStack() {top = null;}/** * 判断栈是否为空 */@Overridepublic boolean isEmpty() {// TODO Auto-generated method stubreturn top == null;}/** * 得到栈顶元素并返回 */@Overridepublic Object peek() { if(top == null) {System.out.println("栈为空");return null;}System.out.println("当前栈顶元素的值为:" + top.element);return top.element;}/** * 删除栈顶元素并返回 */@Overridepublic Object pop() { if(top == null) {System.out.println("空指针");return null; //当栈顶元素为空时,返回空指针} else {Node p = top; //定义一个p来保存栈顶指针//System.out.println(top.element);top = top.next; //指向下一个,原来栈顶的引用丢失,等待被回收内存return p.element;} }/** * 打印栈中的元素 */@Overridepublic void print() {Node p = top;while(p != null) {System.out.println(p.element);p = p.next;}}@Overridepublic void push(Object obj) {top = new Node(obj, top);}//测试public static void main(String [] args) {LinkedStack ls = new LinkedStack();ls.initStack();ls.push("a");ls.push("b");ls.push("c");ls.push("d");ls.push("e");ls.push("f");ls.peek(); //得到栈顶元素System.out.println("当前栈中元素为:");ls.print(); //打印栈中的元素System.out.println("删除栈顶元素后:");if(!ls.isEmpty()) {ls.pop(); //删除栈顶元素ls.peek();ls.print();}System.out.println("清空栈之后:");ls.clear(); //清空栈ls.peek();}}/** * 定义每个链表块 * @author guob * */class Node {Object element;Node next;public Node(Node nt) { //两种构造方法next = nt;}public Node(Object obj, Node nt) { //相当于在头结点处插入数据element = obj;next = nt;}}
package com.guobing.stack;/** * 功能:把一个十进制的数转化为n进制的数 * @author guobing * date:2014/09/02 */public class Transform {/** * @param num 表示十进制的数 * @param n 表示要转化为n进制 */public Transform(long num, int n) {LinkedStack ls = new LinkedStack(); //初始化栈long p = num; //这里创建p变量是有原因的 num的值会变while(num != 0) {int k = (int)(num % n);ls.push(k);num /= n;}System.out.println("10进制数" + p + "转化为" + n + "进制数的结果是:");while(!ls.isEmpty()) {System.out.print(ls.pop() + " ");if(ls.top.next == null) {System.out.println(ls.pop());}}}public static void main(String [] args) {new Transform(234323, 16);new Transform(4344,2);new Transform(4344,8);new Transform(4344,10);}}
测试结果如下:
10进制数234323转化为16进制数的结果是:3 9 3 5 310进制数4344转化为2进制数的结果是:1 0 0 0 0 1 1 1 1 1 0 0 010进制数4344转化为8进制数的结果是:1 0 3 7 010进制数4344转化为10进制数的结果是:4 3 4 4
现在终于写完了,如果有问题,欢迎指教,欢迎讨论。
0 0
- JAVA实现10进制的数转化为任意n进制的数
- 十进制转化为任意进制的数
- 十进制数转化为任意进制
- 整数转化为任意n进制的字符串
- 求一个数中任意的某一段,(可以转化为其他进制)
- Java实现十进制数转化为二进制数的算法
- 将十进制转换为任意进制的数
- C/C++ 浮点数转化为 2,8,10,16 进制的数
- C++实现将十进制数转换为小于等于九的任意进制
- C/C++语言实现十进制正整数转化为2-16进制的数并输出
- 用链栈实现任意进制的转化
- 任意255以内的十进制数转化为16进制数
- 递归 将一个十进制数转化为任意进制字符串
- 把十进制的n转化成r进制的数的模板
- IEEE 16进制浮点数转化为10进制的自定义函数
- 将十进制数N转换为r进制的数
- 将十进制正整数转化为定长为4的N进制字符串,N可以是小于37的任意进制
- 面试题:编写一个将十进制数转换为任意进制的算法或函数
- strlen()不能算出scanf输入字符串的空格问题
- Func<T, TResult>泛型委托
- C快速排序
- ubifs烧写到nand flash中的几种方法
- tbugs开技术博客了
- JAVA实现10进制的数转化为任意n进制的数
- 2013-2014(第六届)中国嵌入式开发从业人员调查报告
- 机房重构之UML图
- [Leetcode]吹响征战Leetcode的号角
- Eclipse下解决tomcat服务器内存不足的问题
- MODULE_DEVICE_TABLE
- LeetCode Solutions : Combination Sum I & II
- 常见的丙肝传播途径有哪些?
- JAVA实现二进制和16进制之间的互相转换,8进制同理,附带异或操作实现