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;
}
网友评论