二进制数转八进制数(参考XJY)

来源:互联网 发布:现在还可以网络购彩票 编辑:程序博客网 时间:2024/06/07 16:26
#include <stdio.h>#include <stdlib.h>#include <math.h>#define STACK_INIT_SIZE 20#define STACKINCREMENT 10typedef char ElemType; //每输入一个位存入一个字符typedef struct{ElemType *base;ElemType *top;int stackSize;}sqStack;void InitStack(sqStack *s){s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));if ( !s->base )exit (0);s->top=s->base;s->stackSize=STACK_INIT_SIZE;}void Push(sqStack *s, ElemType e){if( s->top - s->base > s->stackSize){s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT)*sizeof(ElemType));if(!s->base)exit (0);}*(s->top)=e;s->top++;}void Pop(sqStack *s, ElemType *e){if(s->top == s->base)return;*e=*--(s->top);}int StackLen(sqStack s) //不会进行修改,直接传数据进来就行{return (s.top - s.base); //指针相减,不是地址相减,而是指向元素的值//s是结构,使用点}int main(){ElemType c, d;sqStack s, n;int len, len_n, i, j, sum=0, temp=0;InitStack(&s);InitStack(&n);printf("请输入二进制数,输入#符号表示结束!\n");scanf("%c", &c); // 以字符的形式while( c != '#') // 从最高位开始压栈{Push(&s, c);scanf("%c", &c);}getchar(); // 把回车'\n'从缓冲区去掉len=StackLen(s);printf("栈的当前容量是:%d\n", len);for(i=0; i<len; i++){Pop(&s, &c);if((i+1)%3 != 0){sum+=(c-'0')*pow(2, i%3);}else{sum+=(c-'0')*pow(2, i%3);d=sum;Push(&n, d);sum=0;}}if(len%3 != 0){d=sum;Push(&n, d);}len_n=StackLen(n);printf("新栈的当前容量是:%d\n", len_n);printf("转换为八进制数为:");for(j=0; j<len_n; j++){Pop(&n, &d);printf("%o", d);}printf("\n");return 0;}

0 0
原创粉丝点击