| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 416 人关注过本帖
标题:我的辗转相除,进栈不成啊?
只看楼主 加入收藏
yaojiali920
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2014-2-18
结帖率:100%
收藏
 问题点数:0 回复次数:3 
我的辗转相除,进栈不成啊?
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define  MAXSIZE   100   //根据需要自己定义MAXSIZE为顺序栈的最大存储容量
typedef struct stack
{
    int data[MAXSIZE];
    int top;
}SEQSTACK;

void initstack(SEQSTACK *s)//顺序栈初始化
{
    s->top=-1;                             ;//将栈顶指针指向初始的位置
}

int empty(SEQSTACK *s)    //判断栈空
{
    if(s->top==-1)
        return 1;
    else
        return 0;
}

void push(SEQSTACK *s,int x)//元素x进栈
{
    if(s->top==MAXSIZE-1)
        printf("存储空间已满,元素进栈失败!\n");
    else
    {
           s->top++;                          ;//栈顶指针加1
           s->data[s->top]=x;                      ;//将元素x送到栈顶位置
    }        
}

int pop(SEQSTACK *s)//元素出栈,出栈元素用e返回
{
    int e;
    if(empty(s)==-1)
    {
        printf("栈中元素已空,出栈元素失败!\n");
        return -99;
    }
    else
    {
          s->data[s->top]=e                         ;//将栈顶元素赋值给变量e
         s->top--;                          ;//栈顶指针减1
        return e;
    }

}

void conversion(SEQSTACK *s,int N,int r)  
   { //将十进制数N转换为r进制的数
    int   x;
    initstack(s);
    while (N!=0)  //此循环为入栈操作
    {  
        s->data[s->top++]=N%r;         //将N除以r所得的余数压入栈

         N=N/r                   ; //N整除r所得的商赋值给N
    }
   
    while (!empty(s))          //此循环为出栈操作
    {   
      x=pop(s);
      if(x==10)printf("A");
      else if(x==11)printf("B");
      else if(x==12)printf("C");
      else if(x==13)printf("D");
      else if(x==14)printf("E");
      else if(x==15)printf("F");
      else printf("%d",x);
    }
    printf("\n");
  }

void main()      
     {
        int number,r;    //number为待准备转换的十进制数,r为进制
        SEQSTACK stack;
        char choice;
        while(1)
        {
            printf("请输入一个十进制整数:");
            scanf("%d",&number);
            printf("选择将该数转换为几进制数(2,8,16):");
            scanf("%d",&r);
            fflush(stdin);
            printf("转换后的结果为:");
            conversion(&stack,number,r);
            printf("是否继续?按N结束,其他任意键继续…");
            scanf("%c",&choice);
            system("cls");
            if(choice=='N'||choice=='n')
                break;
        }
}
搜索更多相关主题的帖子: include return 元素 
2014-03-23 16:11
yaojiali920
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2014-2-18
收藏
得分:0 
赋值的时候出错了,晕
2014-03-23 16:42
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:0 
错误地方有好几处,我就不一一指出来
把你的代码稍微改了下,你比较看看。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define  MAXSIZE   100   //根据需要自己定义MAXSIZE为顺序栈的最大存储容量
typedef struct stack
{
    int data[MAXSIZE];
    int top;
}SEQSTACK;

void initstack(SEQSTACK *s)//顺序栈初始化
{
    s->top=-1;                             ;//将栈顶指针指向初始的位置
}

int empty(SEQSTACK *s)    //判断栈空
{
    if(s->top==-1)
        return 1;
    else 
        return 0;
}

void push(SEQSTACK *s,int x)//元素x进栈
{
    if(s->top==MAXSIZE-1)
        printf("存储空间已满,元素进栈失败!\n");
    else
    {
        s->data[++s->top]=x;                      ;//将元素x送到栈顶位置
    }        
}

int pop(SEQSTACK *s)//元素出栈,出栈元素用e返回
{
    if(empty(s)==-1)
    {
        printf("栈中元素已空,出栈元素失败!\n");
        return -99;
    }
    else
    {
          return s->data[s->top--];
    }

}

void conversion(SEQSTACK *s,int N,int r)  
   { //将十进制数N转换为r进制的数
    int   x;
    initstack(s);
    while (N!=0)  //此循环为入栈操作
    {  
         push( s, N%r );
         N=N/r                   ; //N整除r所得的商赋值给N
    } 
    
    while (!empty(s))          //此循环为出栈操作
    {   
      x=pop(s);
      if(x==10)printf("A");
      else if(x==11)printf("B");
      else if(x==12)printf("C");
      else if(x==13)printf("D");
      else if(x==14)printf("E");
      else if(x==15)printf("F");
      else printf("%d",x);
    }
    printf("\n");
  }

void main()       
     {
        int number,r;    //number为待准备转换的十进制数,r为进制
        SEQSTACK stack;
        char choice;
        while(1)
        {
            printf("请输入一个十进制整数:");
            scanf("%d",&number);
            printf("选择将该数转换为几进制数(2,8,16):");
            scanf("%d",&r);
            fflush(stdin);
            printf("转换后的结果为:");
            conversion(&stack,number,r);
            printf("是否继续?按N结束,其他任意键继续…");
            scanf("%c",&choice);
            system("cls");
            if(choice=='N'||choice=='n')
                break;
        }
}
2014-03-23 16:48
yaojiali920
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2014-2-18
收藏
得分:0 
回复 3楼 fragileeye
学习了
2014-03-24 12:50
快速回复:我的辗转相除,进栈不成啊?
数据加载中...
 
   



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

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