| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12552 人关注过本帖
标题:用栈实现进制转换
只看楼主 加入收藏
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
用栈实现进制转换
程序代码:
/*运用栈实现进制转换*/

#include<stdio.h>
#include<malloc.h>
typedef char DataType
#define STACK_SIZE 100

                                         // 构造栈
typedef struct{                       
    DataType *top;
    DataType *base;
    int stack_size;
}seqstack;

void init(seqstack *s)                 // 初始化
{
    s->base=(seqstack *)malloc(STACK_SIZE*sizeof(DataType));
    if(!s->base) exit(-1);
    s->top=s->base;
    s->stack_size=STACK_SIZE;
}

int IsEmpty(seqstack *s)               // 判断栈空
{
    return s->base==s->top;
}

int IsFull(seqstack *s)                // 判断栈满
{
    return s->top-s->base==STACK_SIZE-1;
}

void Push(seqstack *s,char ch)         // 进栈
{
    if(IsFull(s))
    {
        printf("overflow\n!");
        exit(1);
    }
    else
        *s->top++=ch;
}

char Pop(seqstack *s)                 // 出栈
{
    if(IsEmpty(s))
    {
        printf("栈空\n");
        exit(1);
    }
    return *--s->top;
}

char Top(seqstack *s)                   // 取栈顶元素
{
    if(IsEmpty(s))
    {
        printf("栈空\n");
        exit(1);
    }
    return *(s->top-1);
}

void conversion(int a,int b)                     // 实现进制转换
{
    int i;
    seqstack *s;
    init(s);
    while(a)
    {
        Push(s,a%b);
        a=a/b;
    }
    while(!IsEmpty(s))
    {
        i=Pop(s);
        printf("%d",i);
    }
}

int main(int argc,char *argv[])
{
    int a,b;
    printf("please input the data you want to conversion\n");
    scanf("%d",&a);
    printf("please input the scale you want to convert to\n");
    scanf("%d",&b);
    conversion(a,b);
    return 0;
}





请问为何编译提示出错
搜索更多相关主题的帖子: color 
2011-08-09 21:17
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:20 
#include<stdio.h>
#include<malloc.h>
typedef char DataType;//缺结束分号,已修改
#define STACK_SIZE 100
 
typedef struct{                       
     DataType *top;
     DataType *base;
     int stack_size;
 }seqstack;
 
void init(seqstack *s)
 {
     s->base=(DataType *)malloc(STACK_SIZE*sizeof(DataType));//强制转换的类型不对,已修改
     if(!s->base) exit(-1);
     s->top=s->base;
     s->stack_size=STACK_SIZE;
 }
 
int IsEmpty(seqstack *s)
 {
     return s->base==s->top;
 }
 
int IsFull(seqstack *s)
 {
     return s->top-s->base==STACK_SIZE-1;//这里没必要减1
 }
 
void Push(seqstack *s,char ch)
 {
     if(IsFull(s))
     {
         printf("overflow\n!");
         exit(1);
     }
     else
         *s->top++=ch;
 }
 
char Pop(seqstack *s)
 {
     if(IsEmpty(s))
     {
         printf("栈空\n");
         exit(1);
     }
     return *--s->top;
 }
 
char Top(seqstack *s)// 取栈顶元素,你没用到这个函数
 {
     if(IsEmpty(s))
     {
         printf("栈空\n");
         exit(1);
     }
     return *(s->top-1);
 }
 
void conversion(int a,int b)
 {
     int i;
     seqstack s;//不应声明成指针,已修改
     init(&s);//已修改
     while(a)//当a本身即为0时没有输出,考虑过a为负数的情况没?
     {
         Push(&s,a%b);//已修改
         a=a/b;
     }
     while(!IsEmpty(&s))//已修改
     {
         i=Pop(&s);//已修改
         printf("%d",i);//当基数大于9时输出结果不对。改成printf("%x", i);可以实现16进制内的输出。改成printf("%c", (i < 10) i+'0' : i - 10 + 'A');可以实现36进制内的输出
     }
     free(s.base);//释放堆,添加
 }
 
int main(int argc,char *argv[])
 {
     int a,b;
     printf("please input the data you want to conversion\n");
     scanf("%d",&a);
     printf("please input the scale you want to convert to\n");
     scanf("%d",&b);
     conversion(a,b);
     return 0;
 }

重剑无锋,大巧不工
2011-08-09 22:27
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
关于进制转换,我在福建农林大学OJ中也做过这样一个题。下面是我的AC代码,其中b是要转换的进制基数,n是代转换的十进制数
程序代码:
#include <stdio.h>
int main()
{
    int b, n, a[100], i, j;
    scanf("%d %d", &b, &n);
    if(n == 0){ printf("0\n"); return 0;}
    for(i = 0; n > 0; i++)
    {
        a[i] = n % b;
        n /= b;
    }
    for(j = 0; j < i; j++)
        printf("%x", a[i - j - 1]);
    printf("\n");
    return 0;
}


重剑无锋,大巧不工
2011-08-09 23:04
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:0 
这个为什么不可以申明为指针 seqstack *s?
2011-08-10 13:00
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
可以,但你原来的S是悬空的,没有指向实体

重剑无锋,大巧不工
2011-08-10 21:54
yimi6931jxz
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-3-20
收藏
得分:0 
回复 2楼 beyondyf
若考虑a为负数的情况该如何改呢?
2014-03-20 16:53
jmyh
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-10-8
收藏
得分:0 
回复 2 楼 beyondyf
为什么运行之后会有这样的错: error C2065: 'exit' : undeclared identifier
感觉没问题了啊。
2014-10-08 23:05
飞飞向前冲
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-10-12
收藏
得分:0 
回复 7 楼 jmyh
盆友,少了#include <stdlib.h>这个头文件
2014-10-12 19:43
快速回复:用栈实现进制转换
数据加载中...
 
   



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

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