数据结构(二)--栈的应用(数制转换器)

原创 2004年07月17日 16:42:00

/**

 * <p>Title: 栈的应用----可以进行所有数值之间的转化类</p>
 
 * <p>Description: </p>
 
 * <p>Copyright: Copyright (c) 2004</p>
 
 * <p>Company: </p>
 
 * @author shaokun305
 
 * @version 1.0
 
 */

     public class test1 {       

  public static String  ChangeNumeric(String aastr,int n,int m){
 
    //转化成10进制

    int aa=0;
 
    String result="";
 
    Stack stack=new Stack();
 
    String mmx=aastr.toUpperCase();
 
    int endint=0;
 
    for(int i=0;i<mmx.length();i++){
 
      int mid=1;
 
      for(int j=0;j<(mmx.length()-1-i);j++)
 
        mid*=n;

      //System.out.println("mid="+mid);

      // System.out.println("mmx.charAt(i)="+mmx.charAt(i));
 
      int jint=0;
 
                 

       switch(mmx.charAt(i)){

         case 'A':
 
           jint=10;

           break;

         case 'B':
 
           jint=11;

           break;

         case 'C':
 
           jint=12;

           break;

         case 'D':
 
           jint=13;

           break;

         case 'E':
 
           jint=14;

           break;

         case 'F':
 
           jint=15;

           break;

         default:

           jint=Integer.parseInt(""+mmx.charAt(i));

       }

       endint=endint+jint*mid;

       //System.out.println("endint="+endint);

     }

     aa=endint;

                 

     //aa中现在保存的是10进制的数值

     //循环取模求余,进行压栈.

                 

     while(aa!=0){

       stack.push(new Integer(aa%m));
 
       aa/=m;

     }

     //弹栈转化获得的整数值,

     while(!stack.isEmpty()){

       int j=((Integer)stack.pop()).intValue();
 
       String jstr="";
 
       switch(j){

         case 10:
 
           jstr="A";

           break;

         case 11:
 
           jstr="B";

           break;

         case 12:
 
           jstr="C";

           break;

         case 13:
 
           jstr="D";

           break;

         case 14:
 
           jstr="E";

           break;

         case 15:
 
           jstr="F";

           break;

         default:

           jstr=""+j;          

       }

       result+=jstr;

     }

   //输出转化结果

     return result;
 
   //System.out.println("result="+result);

    //System.out.println(new java.util.Date());
 
  }
             

  public test1() {
 
  }

  public static void main(String[] args) {
 
    System.out.println(new java.util.Date());
 
    test1 testx = new test1();
 
    String result="";
 
    Stack stack=new Stack();
 
    if(args.length>=3){

      int aa=0;//Integer.parseInt(args[0]);
 
      int n=Integer.parseInt(args[1]);
 
      int m=Integer.parseInt(args[2]);
 
      /*/转化成10进制

      String mmx=args[0].toUpperCase();
 
      int endint=0;
 
      for(int i=0;i<mmx.length();i++){
 
        int mid=1;
 
        for(int j=0;j<(mmx.length()-1-i);j++)
 
          mid*=n;

        //System.out.println("mid="+mid);

        // System.out.println("mmx.charAt(i)="+mmx.charAt(i));
 
        int jint=0;
 
        switch(mmx.charAt(i)){

          case 'A':
 
            jint=10;

            break;

          case 'B':
 
            jint=11;

            break;

          case 'C':
 
            jint=12;

            break;

          case 'D':
 
            jint=13;

            break;

          case 'E':
 
            jint=14;

            break;

          case 'F':
 
            jint=15;

            break;

          default:

            jint=Integer.parseInt(""+mmx.charAt(i));

        }

        endint=endint+jint*mid;

        //System.out.println("endint="+endint);

      }

      aa=endint;

                 

      //aa中现在保存的是10进制的数值

      //循环取模求余,进行压栈.

                 

      while(aa!=0){

        stack.push(new Integer(aa%m));
 
        aa/=m;

      }

      //弹栈转化获得的整数值,

      while(!stack.isEmpty()){

        int j=((Integer)stack.pop()).intValue();
 
        String jstr="";
 
        switch(j){

          case 10:
 
            jstr="A";

            break;

          case 11:
 
            jstr="B";

            break;

          case 12:
 
            jstr="C";

            break;

          case 13:
 
            jstr="D";

            break;

          case 14:
 
            jstr="E";

            break;

          case 15:
 
            jstr="F";

            break;

          default:

            jstr=""+j;
                 
        }

        result+=jstr;

      }*/

      result=test1.ChangeNumeric(args[0],n,m);                

    }

    //输出转化结果

    System.out.println("result="+result);

    System.out.println(new java.util.Date());
 
  }
 
}

#你编译好这个test1类,如果使用jdk,可以用javac test1.java
然后再:java test1 210145 10 16 回车
输出:
Tue Apr 20 11:50:43 CST 2004 //开始时间
result=334E1
Tue Apr 20 11:50:43 CST 2004 //结束时间
含义:把十进制的210145 转化成16进制数是:334E1
再试验:java test1 4d7a8f 16 2
输出:
Tue Apr 20 11:54:44 CST 2004
result=10011010111101010001111
Tue Apr 20 11:54:44 CST 2004
含义:把16进制的4d7a8f转换成2进制的是10011010111101010001111

#具体的利用栈的转换算法说明: 
例如 (1348)10=(2504)8,其运算过程如下  
           n         n div 8     n mod 8
          1348        168           4
          168         21            0
          21          2             5
          2           0             2

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

【数据结构】用栈实现数制的转换

用栈实现数制的转换.cpp #include using namespace std; typedef int SElemType; typedef struct {  SElemType *b...
  • qq_32353771
  • qq_32353771
  • 2015年11月10日 15:02
  • 1832

数据结构学习之路-第三章:栈的应用

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 前言: 前面已经介绍过栈的相关操作的具体实现,那么现在就按...
  • libin1105
  • libin1105
  • 2015年09月08日 19:15
  • 1319

数据结构----栈运用的小例子

题:输入一个10进制整数,输出16进制。     转化16进制数,首先应该除以基数16,得到的模为转化后的最低位的数,得到的商再除以基数16,再得到模就是下个位的数........以此类推,当商等于...
  • jsh13417
  • jsh13417
  • 2013年01月01日 11:28
  • 3396

数据结构(1)-栈的特性以及简单应用

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • qq_22075977
  • qq_22075977
  • 2015年12月26日 17:50
  • 1214

【数据结构栈应用系列】括号匹配

括号匹配算法在各种编程的IDE工具中都会用到,用来检测关于括号匹配的语法错误,括号匹配实际上不复杂,主要就是利用栈这个数据结构,扫描输入的字符串,若遇到左括号则直接入栈,若遇到右括号则弹出栈顶括号,看...
  • htq__
  • htq__
  • 2016年03月26日 16:59
  • 11977

常用数据结构栈的应用—-表达式求值

常用数据结构栈的应用—-表达式求值 常用数据结构栈的应用-表达式求值 栈 表达式求值 后缀表达式求值 中缀表达式转后缀表达式 代码示例栈 栈是常用的数据结构,栈又称堆栈,是一种受限的线性表。其限制...
  • u014532901
  • u014532901
  • 2016年09月13日 11:53
  • 1481

[数据结构与算法分析]栈的应用-学习笔记

平时我们很少接触到一个栈的使用,但是今天看了如下三个例子后感触颇深,对于栈应用的情况理解更深了。分享如下: 1、平衡符号 平衡是个动词,意思就是用来平衡符号的,例如关于方法里{}左右大括号的匹配问...
  • u014629433
  • u014629433
  • 2016年06月06日 09:04
  • 649

Java数据结构-线性表之栈的应用-递归及其应用

递归函数的定义:把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称做递归函数(递归函数必须有一个结束的条件,以免陷入无穷尽的递归中)。迭代和递归的区别是: (1).迭代使用的是循环结构,...
  • yannanying
  • yannanying
  • 2015年08月27日 21:12
  • 745

【数据结构】--几道栈和队列面试题

用两个栈实现一个队列 1、思路分析 拿到这道题,会有以下几种思路: 思路一:入队时,将所有的元素压入到s1中 出队时,将s1中的所有元素倒入到s2中,然后让s2中栈顶的元素出栈,然后将s2中所有的...
  • lalu58
  • lalu58
  • 2017年05月05日 01:11
  • 415

数据结构实验之栈四:括号匹配(栈的运用)

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给你一串字符,不超过50个字符,...
  • jert159
  • jert159
  • 2014年08月11日 21:26
  • 1219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构(二)--栈的应用(数制转换器)
举报原因:
原因补充:

(最多只允许输入30个字)