| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 395 人关注过本帖
标题:二进制转换为八进制 栈的实现
取消只看楼主 加入收藏
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
结帖率:96.77%
收藏
 问题点数:0 回复次数:1 
二进制转换为八进制 栈的实现
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define STACK_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
    char  *top;
    char *base;
    int stack_size;
} SqStack;
int Initstack(SqStack &S)
{
    S.base=(char *)malloc(STACK_SIZE*sizeof(char));
    if(!S.base)
        exit(0);
    S.top=S.base;
    S.stack_size=STACK_SIZE;
    return 1;
}
int Push(SqStack &S,char  e)
{
    if(S.top-S.base>=S.stack_size)
    {
        S.base=(char *)realloc(S.base,(S.stack_size+STACKINCREMENT)*sizeof(char ));
    if(!S.base) exit(0);
    S.top=S.base+S.stack_size;
    S.stack_size=S.stack_size+STACKINCREMENT;
    }
    *S.top++=e;
    return 1;
}
int Pop(SqStack &S,char &e)
{
    if(S.top==S.base)
        return 0;
    e=*--S.top;
    return 1;
}
int StackLen(SqStack &S)
{
    return (S.top-S.base);
}
int main(void)
{
    char c;
    int len,i,j,sum=0;
    SqStack S1;
    SqStack S2;
    Initstack(S1);
    printf("Please input a binary number and type '#' for end\n");
    scanf("%c",&c);
    while(c!='#')
    {
        if(c=='1'||c=='0')
        {
            Push(S1,c);
        }
        scanf("%c",&c);
    }
    Initstack(S2);
    len=StackLen(S1);
    for(i=0;i<len;i=i+3)//总感觉这里错了,但具体的不知道怎样改
    {
        for(j=0;j<3;j++)
        {
            Pop(S1,c);
            sum=sum+(c-48)*pow(2,j);
            if(S1.base==S2.top)
                break;
        }
        Push(S2,sum+48);
        sum=0;
    }
    printf("The Octal from is :\n");
    while(S2.base!=S2.top)
    {
        Pop(S2,c);
        printf("%c",c);
    }
    putchar(10);
    return 0;
}
悲剧的是:输入的个数是3的倍数时,就能正确显示,一旦不是,就不对了。




图片附件: 游客没有浏览图片的权限,请 登录注册

高手指教下吧。
搜索更多相关主题的帖子: 八进制 二进制 top 
2012-10-27 11:14
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:0 
我错了 哎 这下亏了。。。
if(S1.base==S2.top)
     break;
应该是 if(S1.base==S1.top)才对

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-10-27 11:16
快速回复:二进制转换为八进制 栈的实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022890 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved