栈应用之将二进制转化为十进制,八进制,十六进制

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<math.h>
  4
  5 #define INIT_STACK_SZIE 20
  6 #define STACK_INCREMENT 10
  7 #define OK 1
  8 #define ERROR 0
  9
 10 typedef char Elemtype;
 11 typedef int Status;
 12
 13 typedef struct SuqStack{
 14     Elemtype* base;
 15     Elemtype* top;
 16     int stackSize;
 17 }SuqStack;
 18
 19 Status InitStack(SuqStack *s){
 20     s->base = (Elemtype*)malloc(sizeof(Elemtype) * INIT_STACK_SZIE);
 21     if(!s->base)
 22         return ERROR;
 23     s->top = s->base;
 24     s->stackSize = INIT_STACK_SZIE;
 25     return OK;
 26 }
 27 Status Pop(SuqStack *s,Elemtype *result){
 28     if(s->base == s->top)
 29         return ERROR;
 30     *result = *(--(s->top));
 31     return OK;
 32 }
 33 Status Push(SuqStack *s,Elemtype value){
 34     if(s->top - s->base == s->stackSize){
 35         s->base = (Elemtype*)realloc(s->base,sizeof(Elemtype) * (STACK_INCREMENT + INIT_STACK_SZIE));
 36         if(!s->base)
 37             return ERROR;
 38         s->top = s->base + INIT_STACK_SZIE;
 39         s->stackSize = INIT_STACK_SZIE + STACK_INCREMENT;
 40     }
 41     *(s->top) = value;
 42     s->top++;
 43     return OK;
 44 }
 45 int StackLength(SuqStack s){
 46     return s.top - s.base;
 47 }
 48 Status Binary2Decimal(){
 49     SuqStack s;
 50     InitStack(&s);
 51     Elemtype c;
 52     int i;
 53     int sum = 0;
 54     int len;
 55     printf("please enter binary number end of ‘#‘: ");
 56     scanf("%c",&c);
 57     while(c != ‘#‘){
 58         Push(&s,c);
 59         scanf("%c",&c);
 60     }
 61     getchar();
 62     len = StackLength(s);
 63     for(i = 0; i < len; i++){
 64         Pop(&s,&c);
 65         sum = sum + (c-48) * pow(2,i);
 66     }
 67     printf("result is %d(10)\n",sum);
 68     return OK;
 69 }
 70 Status Binary2Octal(){
 71     Elemtype c;
 72     SuqStack s1;
 73     SuqStack s2;
 74     InitStack(&s1);
 75     InitStack(&s2);
 76     int i,j,k,len,len1,sum;
 77     printf("please enter binary number end of ‘#‘: ");
 78     scanf("%c",&c);
 79     while(c != ‘#‘){
 80         Push(&s1,c);
 81         scanf("%c",&c);
 82     }
 83     getchar();
 84     len = StackLength(s1);
 85     for(i = 0; i < len; i = i + 3){
 86         sum = 0;
 87         for(j = 0,k = i; j < 3 && k < len; j++,k++){
 88             Pop(&s1,&c);
 89             sum = sum + (c-48) * pow(2,j); /* 1的ASCII=49
 90                               0的ASCII=48
 91                             */
 92         }
 93         //printf("%c\n",sum+48);
 94         Push(&s2,sum + 48);            //sum+48为ASCII码值
 95                             //栈中的元素的类型char
 96     }
 97     len1 = StackLength(s2);
 98     printf("the result is ");
 99     for(i = 0;i < len1; i++){
100         Pop(&s2,&c);
101         printf("%c",c);
102     }
103     printf("(8)\n");
104     return OK;
105 }
106 Status Binary2Hexadecimal(){
107     Elemtype c;
108     SuqStack s1;
109     SuqStack s2;
110     InitStack(&s1);
111     InitStack(&s2);
112     int i,j,k,len,sum,len1;
113     printf("please enter binary number end of ‘#‘: ");
114     scanf("%c",&c);
115     while(c != ‘#‘){
116         Push(&s1,c);
117         scanf("%c",&c);
118     }
119     getchar();
120     len = StackLength(s1);
121     for(i = 0; i < len; i = i + 4){
122         sum = 0;
123         for(j = 0,k = i; j < 4 && k < len; j++, k++){
124             Pop(&s1,&c);
125             sum  = sum + (c - 48) * pow(2, j);
126         }
127         /* 0-------48         1-------49
128          * 2-------50         3-------51
129          * 4-------52          5-------53
130          * 6-------54         7-------55
131          * 8-------56         9-------57
132          * A-------65         B-------66
133          * C-------67         D-------68
134          * */
135         if(sum < 10)
136             Push(&s2,sum + 48);
137         else
138             Push(&s2,sum + 55);
139     }
140     len1 = StackLength(s2);
141     for(i = 0; i < len1; i++){
142         Pop(&s2,&c);
143         printf("%c",c);
144     }
145     printf("\n");
146 }
147 int main(){
148     //Binary2Decimal();
149     //Binary2Octal();
150     Binary2Hexadecimal();
151     return 0;
152 }
时间: 2024-10-24 11:45:48

栈应用之将二进制转化为十进制,八进制,十六进制的相关文章

二进制转化成十进制(转)

二进制数的加法和乘法运算如下: 0+0=0 0+1=1+0=1 1+1=10 0×0=0 0×1=1×0=0 1×1=1 二进制数.转换为十进制数的规律是:把二进制数按位权形式展开多项式和的形式,求其最后的和,就是其对应的十进制数——简称“按权求和”. 例如:把(1001.01)2转换为十进制数. 解:(1001.01)2 =1×(2的3次方)+0×(2的2次方)+0×(2的1次方)+1×(2的0次方)+0×(2的-1次方)+1×(2的-2次方) =8+0+0+1+0.5+0.25 =9.75

C十进制和二进制转化

1 /*递归形式的十进制数转化为二进制数*/ 2 void D2B( int n ) 3 { 4 if( n == 0 ) 5 return ; 6 else{ 7 D2B( n/2 ); 8 printf("%d",n%2); 9 } 10 } 11 12 /*二进制字符串转化为十进制整数*/ 13 int B2D(char *s) 14 { 15 int sum = 0; 16 int len = strlen(s); 17 int i; 18 for(i=len-1;i>=

二进制、十进制、十六进制相互转换

1.二进制->10进制 例如: 1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13 转化成十进制要从右到左用二进制的每个数去乘以2的相应次方不过次方要从0开始 2.二进制转16进制: 要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,分的不够的前边补零,用四位数的二进制数来代表一个16进制. 说的比较啰嗦,就是2^4=16,每四位二进制正好是1位16进制 例如:    10112->0001 0112->18 (16) 3. 10进制

大话二进制,八进制,十进制,十六进制之间的转换

1.前言 每次放假最无聊的事情,就是不想起床,不想吃饭,方正就是不想动,躺在床上,看着手机,无聊的刷着QQ空间,虽然现在已经很少人玩QQ空间,可是这种习惯一直保持到现在,都没有改变过,电脑上的QQ突然闪动着,我知道是丁大叔发来的QQ消息,叫我一起去吃重庆老麻抄手,丁大叔之所以叫大叔,是因为一起上学的时候,被我们班上的女生调戏了一下,所以我时常拿这个调侃他,不过他也从来都不在乎. 我是湖北人,丁大叔是四川人,我俩的口味都一样,吃东西都要多少带点辣的,在这个变态的广州,他们都不吃辣椒的,要么就是超级

Python 二进制,十进制,十六进制转换

十六进制 到 十进制 使用 int() 函数 ,第一个参数是字符串 '0Xff' ,第二个参数是说明,这个字符串是几进制的数.  转化的结果是一个十进制数. >>> int('0xf',16) 15 二进制 到 十进制 >>> int('10100111110',2) 1342 八进制 到 十进制 >>> int('17',8) 15 其实可以看到,不管 几进制数 转换成 十进制数 ,都是用 int()  函数 .之后后面的 第二个参数 写清楚 前面字

《N诺机试指南》(六)负二进制转化习题

先看题目: 意思:将一个十进制数进行负二进制转化,将一个十进制数进行二进制转化大家都很清楚,取余再除2向下取整,接着反序输出 负二进制转化类似:1.对-2取余,再取绝对值 2.存入结果数组里 3.将数减去余数再除-2 4.反顺序打印出来 代码: //负二进制转换 /* 道理与 十进制转二进制一样 注意:有多组输入 */ #include <stdio.h> #include <math.h> int main(){ int n; int result[105]; while(sca

python中各种基础类型的转换,二进制,八进制,十进制,十六进制

python中所有类型都是作为对象的形式来存在的. 在python中没有char型,只有字符串类型,这样我们可能将char型转换为整型时极不方便,但是python已经提供了这些转换的内置函数. python 中除了整型,其他进制的只能用字符串来表示 1 int() 可以将 二进制,八进制,十六进制转换成十进制整型 >>> int('1111', 2) 15 >>> int('f', 16) 15 >>> int('17', 8) 15 2 chr()

关于二进制,八进制,十进制,十六进制相互转换

1.除二进制外的进制转换 "num不为二进制数" num.toString(2) //转换成二进制 num.toString(8) //转换成八进制 num.toString(10) //转换成十进制 num.toString(16) //转换成十六进制 2.任意进制转换成十进制 parseInt(num,2) //二进制转换成十进制 parseInt(num,8) //八进制转换成十进制 parseInt(num,16) //十六进制转换成十进制 3.任意进制间的转换 先利用2转换成

Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换

public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ public static String StringToAsciiString(String content) { String result = ""; int max = content.length(); for (int i = 0; i < max; i++) { char c