栈实现 二进制 转8,,10进制
2014-10-25 22:50
381 查看
# include<stdio.h>
# include<stdlib.h>
# include<math.h>
#define STACKINITSIZE 20
# define STACKINCREMENT 10
typedef struct{
char *base;
char *top;
int stackSize;
}sqStack;
void Init(sqStack * s){
s->base = (char *)malloc(STACKINITSIZE * sizeof(char));
if(!s->base) exit(0);
s->top = s->base;
s->stackSize = STACKINITSIZE;
}
void Push(sqStack * s, char e){
//检测是否满
if(s->top - s->base > s->stackSize){
s->base = (char *)realloc(s->base, (s->stackSize+STACKINCREMENT)* sizeof(char));
if(!s->base) exit(0);
s->top = s->base + s->stackSize;
s->stackSize += STACKINCREMENT;
}
*(s->top) = e;
s->top++;
}
void Pop(sqStack * s, char *e){
if(s->top == s->base) exit(0);
*e = *--(s->top);
}
int StackLen(sqStack s){
return (s.top - s.base);
}
int main(){
char c;
sqStack s1, s2;
int len, i,j, sum = 0;
Init(&s1);
printf("请输入二进制数,输入#表示结束");
scanf("%c",&c);
while(c != '#'){
Push(&s1, c);
scanf("%c",&c);
}
getchar();
len = StackLen(s1);
Init(&s2);
//二进制---8进制
for(i=0; i<len; i=i+3){
for(j=0; j<3;j++){
Pop(&s1, &c);
sum+=(c-48) * pow(2, j);//ASCii做0对应48
if(s1.base == s1.top) break;
}
Push(&s2,sum+48);//也要放asc码对应的数字
sum = 0;
}
printf("八进制数是");
while(s2.base != s2.top ){
Pop(&s2,&c);
printf("%c", c);
}
return 0;
}
//二进制--10进制
# include<stdio.h>
# include<stdlib.h>
# include<math.h>
#define STACKINITSIZE 20
# define STACKINCREMENT 10
typedef struct{
char *base;
char *top;
int stackSize;
}sqStack;
void Init(sqStack * s){
s->base = (char *)malloc(STACKINITSIZE * sizeof(char));
if(!s->base) exit(0);
s->top = s->base;
s->stackSize = STACKINITSIZE;
}
void Push(sqStack * s, char e){
//检测是否满
if(s->top - s->base > s->stackSize){
s->base = (char *)realloc(s->base, (s->stackSize+STACKINCREMENT)* sizeof(char));
if(!s->base) exit(0);
}
*(s->top) = e;
s->top++;
}
void Pop(sqStack * s, char *e){
if(s->top == s->base) exit(0);
*e = *--(s->top);
}
int StackLen(sqStack s){
return (s.top - s.base);
}
int main(){
char c;
sqStack s;
int len, i, sum = 0;
Init(&s);
printf("请输入二进制数,输入#表示结束");
scanf("%c",&c);
while(c != '#'){
Push(&s, c);
scanf("%c",&c);
}
getchar();
len = StackLen(s);
for(i=0; i<len; i++){
Pop(&s, &c);
sum+=(c-48) * pow(2, i);//ASCii做0对应48
}
printf("十进制数是:%d",sum);
return 0;
}
# include<stdlib.h>
# include<math.h>
#define STACKINITSIZE 20
# define STACKINCREMENT 10
typedef struct{
char *base;
char *top;
int stackSize;
}sqStack;
void Init(sqStack * s){
s->base = (char *)malloc(STACKINITSIZE * sizeof(char));
if(!s->base) exit(0);
s->top = s->base;
s->stackSize = STACKINITSIZE;
}
void Push(sqStack * s, char e){
//检测是否满
if(s->top - s->base > s->stackSize){
s->base = (char *)realloc(s->base, (s->stackSize+STACKINCREMENT)* sizeof(char));
if(!s->base) exit(0);
s->top = s->base + s->stackSize;
s->stackSize += STACKINCREMENT;
}
*(s->top) = e;
s->top++;
}
void Pop(sqStack * s, char *e){
if(s->top == s->base) exit(0);
*e = *--(s->top);
}
int StackLen(sqStack s){
return (s.top - s.base);
}
int main(){
char c;
sqStack s1, s2;
int len, i,j, sum = 0;
Init(&s1);
printf("请输入二进制数,输入#表示结束");
scanf("%c",&c);
while(c != '#'){
Push(&s1, c);
scanf("%c",&c);
}
getchar();
len = StackLen(s1);
Init(&s2);
//二进制---8进制
for(i=0; i<len; i=i+3){
for(j=0; j<3;j++){
Pop(&s1, &c);
sum+=(c-48) * pow(2, j);//ASCii做0对应48
if(s1.base == s1.top) break;
}
Push(&s2,sum+48);//也要放asc码对应的数字
sum = 0;
}
printf("八进制数是");
while(s2.base != s2.top ){
Pop(&s2,&c);
printf("%c", c);
}
return 0;
}
//二进制--10进制
# include<stdio.h>
# include<stdlib.h>
# include<math.h>
#define STACKINITSIZE 20
# define STACKINCREMENT 10
typedef struct{
char *base;
char *top;
int stackSize;
}sqStack;
void Init(sqStack * s){
s->base = (char *)malloc(STACKINITSIZE * sizeof(char));
if(!s->base) exit(0);
s->top = s->base;
s->stackSize = STACKINITSIZE;
}
void Push(sqStack * s, char e){
//检测是否满
if(s->top - s->base > s->stackSize){
s->base = (char *)realloc(s->base, (s->stackSize+STACKINCREMENT)* sizeof(char));
if(!s->base) exit(0);
}
*(s->top) = e;
s->top++;
}
void Pop(sqStack * s, char *e){
if(s->top == s->base) exit(0);
*e = *--(s->top);
}
int StackLen(sqStack s){
return (s.top - s.base);
}
int main(){
char c;
sqStack s;
int len, i, sum = 0;
Init(&s);
printf("请输入二进制数,输入#表示结束");
scanf("%c",&c);
while(c != '#'){
Push(&s, c);
scanf("%c",&c);
}
getchar();
len = StackLen(s);
for(i=0; i<len; i++){
Pop(&s, &c);
sum+=(c-48) * pow(2, i);//ASCii做0对应48
}
printf("十进制数是:%d",sum);
return 0;
}
相关文章推荐
- VC++ 中实现进制2进制,10进制,16进制的相互转换
- 二进制转10进制
- 10进制转16进制(采用移位实现)
- C语言学习4-1: 汉若塔。10进制装二进制,8进制,16进制。杨辉三角。
- bash实现10进制,16进制等等相互之间转化(转)
- 一个利用堆栈实现的正整数10进制向16进制的转化程序
- js使用栈来实现10进制转8进制与取除数及余数
- c语言位域实现10进制转换成2进制
- PHP实现各进制间的转换 十进制与二进制、八进制、十六进制间的互换
- 递归算法实现10进制到N进制的转换
- 链栈实现10进制转换2进制
- 【原】VC++ 中实现进制2进制,10进制,16进制的相互转换
- 巧借 Convert 实现 2进制 10进制 16进制 互转
- 10进制数转二进制表示
- 自己实现itoa(),10进制到2~36进制的转换
- 进制数转换器的VB算法实现(2/8/10/16进制数可以相互转换)
- 28.整数的二进制表示中1的个数 题目:输入一个整数,求该整数的二进制表达中有多少个1。 例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
- perl实现16进制数转换成10进制数
- 两种方法实现10进制和62进制互转
- 伙伴地址 Buddy System 二进制地址为011011110000,大小为4(10进制数)和16(10进制数)块的伙伴地址分别为