• 数据结构-栈的实现之数制转换


    常用的进制有四种:二进制、八进制、十进制、十六进制。他们之间都可以进行俩俩的互相转换;

    有一种转换方法为余数法,其转换思想与栈的存储正好适应。适用于十进制转换为二进制、八进制、十六进制;

    余数法:连续除以基,直到商为0,从低到高纪录数值为转换结果。

    因为结果是从低到高纪录的所以使用到栈,先将结果全部入栈之后再全部出栈。

    实现函数代码(用到之前写的数据结构-栈的顺序表达结构的头文件):

     1void conversion(int a, int b)  //参数为从a进制转换为b进制
    2 { 3 int num = 0; 4 char z = 'A'; 5 printf("请输入你想要转换的%d进制数",a); 6 scanf("%d", &num); 7 while(num) 8 { 9 Push(Scale, num%b);  //取余数逐个进栈 10 num /=b;  //求商 11 } 12 int e = 0; 13 printf("转换为%d进制数为:", b); 14 while(!StackEmpty(Scale)) 15 { 16 Pop(Scale, e);   //逐个出栈 17 if(e >= 10 && e <= 15)  //结果为十六进制时用到转换为字母 18 printf("%c", z+e-10); 19 else 20 printf("%d", e); 21 } 22 printf(" "); 23 }

    这样就用栈实现了由十进制转换为其他进制的算法。

    接下来我们讨论下其他的进制转换为十进制的算法:实现方法可以用按权展开法,想了想。这种方法并没有什么好的算法解决。无非是两个循环嵌套,外循环一位位的走,内循环将每一位进行求幂。因为并没有涉及数据结构的思想(我认为这样写很麻烦)所以就只是讨论讨论实现方法,就不抛出代码了。等我想到更好的解决方法后在补上。

    好了,现在与十进制有关的转换都实现了,还剩下三类:1、二进制与八进制;2、二进制与十六进制;3、八进制与十六进制;其实这三类都一样的实现。都先转换为十进制在用十进制余数法用栈去求。这样这三类就可以用上面介绍的与十进制有关的转换方法实现了;其实在解决其他进制转换为十进制上,如果只是输出的话完全可以用printf格式化输出实现。%o八进制输出,%x十六机制输出,%d十进制输出。当是格式化输出里没有对应的二进制输出,这点只能写函数实现。

  • 相关阅读:
    省市区(简版)
    利用 NSSortDescriptor 对 NSMutableArray 排序
    Objective-C 高性能的循环遍历 forin
    iOS-内存管理
    ios-遍历和排序
    寒假 OC-代理,类目,内存,协议,延展,数组,字典,集合
    Oracle SQL篇(二)oracle自连接操作
    Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析
    Oracle SQL篇(四)group by 分组与分组的加强 rollup
    ODI中删除数据的处理
  • 原文地址:https://www.cnblogs.com/ABook/p/5384469.html
Copyright © 2020-2023  润新知