2019-05-11(栈的运用 进制转换)

2019-05-12  本文已影响0人  常人

1、数制转换

十进制 十六进制  八进制 二进制 之间转换 的思路 
十进制转化为8进制 课本实例:
1、思路是通过取证、取余两种运算+栈对取余结果进行保存。
2、具体逻辑:(N div d)*d + N mod n" 因为计算过程中 从低位到高位产生八进制的各位数位,而计算的时候是从高位开始的 ,二者之间是相反的。"

数据结构只需要写出基本逻辑的轮廓:具体的一些细节的实现 看 题目考察的重点 :这个考察点显然不是考察 栈的实现逻辑
而是考察 怎么将数据进行进制的转换。

void conversion( )
{
InitStack(&S);"构造空栈"
sacnf("%d",n);
while(n){
push(&S,n%8);
n = n/8;
}
while(!StackEmpty(S){
pop(S,e);
printf("%d",e);
}
}
如果是十六进制转化为二进制呢?

思路:将每位十六进制的树切分成单个树,分别转化为十进制 再将十进制转化为分别四位二进制 。拼接起来
如何实现编码?

void conversion16_2(){
scanf(%x,m);


}

参考:https://blog.csdn.net/zhangjianjun521/article/details/79081435

"采用 char指针 指向String 类型的字符串的地址,方便根据字符串根据每个索引进行遍历"
"strlen()库函数 :函数用来统计 字符串的长度"
对没每个索引下保存的十六进制的值 根据选择语句(if else)将其转化为十进制;

#include <stdio.h>
#include <string.h>
 
/* 十六进制数转换为十进制数 */
long hexToDec(char *source);
 
/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch);
 
int main()
{
    char *hex = "75BCD15";  "采用 char指针 指向String 类型的字符串的地址,方便根据字符串根据每个索引进行遍历"
 
    printf("16进制数:\t%s\n", hex);
    printf("10进制数:\t%ld\n", hexToDec(hex));
 
    return 0;
}
 
/* 十六进制数转换为十进制数 */
long hexToDec(char *source)
{
    long sum = 0;
    long t = 1;
    int i, len;
 
    len = strlen(source); "strlen()库函数 :函数用来统计 字符串的长度"
    for(i=len-1; i>=0; i--)
    {
        sum += t * getIndexOfSigns(*(source + i));
        t *= 16;
    }  
 
    return sum;
}

/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch)
{
    if(ch >= '0' && ch <= '9')
    {
        return ch - '0';
    }
    if(ch >= 'A' && ch <='F') 
    {
        return ch - 'A' + 10;
    }
    if(ch >= 'a' && ch <= 'f')
    {
        return ch - 'a' + 10;
    }
    return -1;
}
二进制转化为十六进制??

2、括号匹配的检验

上一篇下一篇

猜你喜欢

热点阅读