其他分享
首页 > 其他分享> > 3-2 数制转换计算器

3-2 数制转换计算器

作者:互联网

 

3-2 数制转换计算器 (100 分)

十进制数N和其他d进制数的转换是计算机实现计算的基本问题。通常我们可以使用短除法进行转换,基本原理为:(其中:div为整除运算,mod为求余运算)。短除法最先计算得出的余数为进制转换后的低位,最后计算得出的余数为进制转换后的高位,计算顺序和输出顺序相反,而栈具有后进先出的固有特性,致使栈成为程序设计中的有用工具我们。请使用栈的链式存储结构,设计一个程序,解决十进制转换成其他进制的问题。 数制转换计算器 (1)输入任意一个非负十进制整数n (2)打印输出与N等值的2进制数。

函数接口定义:

数据类型的定义:
#define TRUE 1
#define FALSE 0
#define Stack_Size 50
#define StackElementType int

/*顺序栈*/
typedef struct
{
    StackElementType elem[Stack_Size]; /*用来存放栈中元素的一维数组*/
    int top;                  /*用来存放栈顶元素的下标,top为-1表示空栈*/
}SeqStack;

需要完成的接口:
void Conversion(int N); /*对于任意的一个非负十进制数N,打印出与其等值的二进制数*/

裁判测试程序样例:

#include <stdio.h> 

#define TRUE 1
#define FALSE 0
#define Stack_Size 50

#define StackElementType int

/*顺序栈*/

typedef struct
{
    StackElementType elem[Stack_Size]; /*用来存放栈中元素的一维数组*/
    int top;                  /*用来存放栈顶元素的下标,top为-1表示空栈*/
}SeqStack;

/*初始化*/
void InitStack(SeqStack *S);
int IsEmpty(SeqStack *S); /*判断栈S为空栈时返回值为真,反之为假*/
/*判栈满*/
int IsFull(SeqStack *S);/*判断栈S为满栈时返回值为真,反之为假*/
int Push(SeqStack *S,StackElementType x);
int Pop(SeqStack *S,StackElementType *x);
/*取栈顶元素。*/
int GetTop(SeqStack *S,StackElementType *x);
void Conversion(int N);  /*对于任意的一个非负十进制数N,打印出与其等值的二进制数*/

int main()
{
    int n;
    scanf("%d",&n);
    Conversion(n);
    return 0;
}

/*初始化*/
void InitStack(SeqStack *S)
{
    /*构造一个空栈S*/
      S->top = -1;
}

/*判栈空*/
int IsEmpty(SeqStack *S) /*判断栈S为空栈时返回值为真,反之为假*/
{
    return(S->top==-1?TRUE:FALSE);
}

/*判栈满*/
int IsFull(SeqStack *S)    /*判断栈S为满栈时返回值为真,反之为假*/
{
    return(S->top==Stack_Size-1?TRUE:FALSE);
}

int Push(SeqStack *S,StackElementType x)
{
    if(S->top==Stack_Size-1)  
        return(FALSE);  /*栈已满*/
    S->top++;
    S->elem[S->top] = x;
    return(TRUE);
}

int Pop(SeqStack *S,StackElementType *x)
{  
    /* 将栈S的栈顶元素弹出,放到x所指的存储空间中 */
    if(S->top == -1)  /*栈为空*/
        return(FALSE);
    else
    {
          *x = S->elem[S->top];
        S->top--;    /* 修改栈顶指针 */
          return(TRUE);
    }
}

/*取栈顶元素。*/
int GetTop(SeqStack *S,StackElementType *x)
{  
    /* 将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变 */
    if(S->top == -1)  /*栈为空*/
        return(FALSE);
    else
    {
          *x = S->elem[S->top];
          return(TRUE);
    }    
}

/* 请在这里填写答案 */
void Conversion(int N)  //十进制转换
{
}

输入样例:

在这里给出一组输入。例如:

20

输出样例:

在这里给出相应的输出。例如:

10100

 接口实现:

void Conversion(int N)  /*对于任意的一个非负十进制数N,打印出与其等值的二进制数*/
{   SeqStack S; StackElementType x;      /*S为顺序栈或链栈*/
    InitStack(&S);
	while(N>0)
	{   
		x=N%2; 
		Push(&S, x); 
		N=N/2; 
	}
	while(!IsEmpty(&S))
	{ 
		Pop(&S,&x); 
		printf("%d",x); 
	}
}

 

标签:SeqStack,转换,int,top,return,StackElementType,计算器,数制,define
来源: https://blog.csdn.net/m0_54491109/article/details/117401606