-->
当前位置:首页 > 题库 > 正文内容

函数题:用顺序栈实现将非负的十进制数转换为指定的进制数【有题解视频】

Luz3年前 (2022-03-24)题库1780
利用顺序栈将输入的非负的十进制数N转换为指定的d(二、八或十六)进制数。

顺序栈的定义如下:
c++
#define STACKSIZE 100
typedef int DataType;
typedef struct
{
DataType items[STACKSIZE]; /*存放栈中元素的一维数组*/
int top; /*用来存放栈顶元素的下标*/
}SqStack;


### 函数接口定义:
c++
int DecimalConvert(SqStack *s, int dec, int scale);

函数参数说明:形参--s、dec、scale,其中,s是存放转换后的scale进制数的各位数字,dec 主函数输入的待转换的十进制数,scale是指定的数制(只能是2、8或16)。 函数返回值:1,表示函数执行完成;0,表示函数未成功执行。


### 裁判测试程序样例:
c++
#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 100

typedef int DataType;
typedef struct
{
DataType items[STACKSIZE]; /*存放栈中元素的一维数组*/
int top; /*用来存放栈顶元素的下标*/
}SqStack;

int InitSqStack(SqStack *S); /* 初始化顺序栈, 细节在此不表 */
int SqStackPush( SqStack *S, DataType e ); /* 压栈函数, 细节在此不表 */
int SqStackPop(SqStack *S, DataType *e); /* 出栈函数, 细节在此不表 */
int SqStackEmpty(SqStack S) ; /* 判栈空函数, 细节在此不表 */

int DecimalConvert(SqStack *s, int dec, int scale); /* 本题要求完成的函数 */

int main()
{
SqStack s;
char ch[] = "0123456789ABCDEF"; //二、八、十六进制所使用的数字
unsigned dec,scale;
DataType tmp;

InitSqStack( &s );
scanf_s("%d %d", &dec, &scale);

if( DecimalConvert(&s, dec, scale ) )
{
printf("十进制数:%d,转换为:%d进制数,结果为:", dec, scale);
while( !SqStackEmpty(s))
{
SqStackPop(&s, &tmp);
printf("%c",ch[tmp]);
}
}
else
printf("数制转换未成功!");

printf("\n");

return 1;
}

/* 请在这里填写答案 */


### 输入样例:

in
20 2



### 输出样例:

out
十进制数:20,转换为:2进制数,结果为:10100



### 输入样例:

in
20 8



### 输出样例:

out
十进制数:20,转换为:8进制数,结果为:24



### 输入样例:

in
20 16



### 输出样例:

out
十进制数:20,转换为:16进制数,结果为:14







答案:若无答案欢迎评论

#写在前面的话#

*提供题解视频,是为了帮助大家掌握算法的思想,在今后的编程、考试、面试中,换了语言,换了编译器,换了开发平台,都能重现这种思想,从而编写出任意语言任意编译器任意开发平台下面的这种算法的代码来,所以对于一打开题解报告,就直接拖到视频最后看参考代码的做法,我们非常不赞同,也不符合我们制作PPT录制讲解视频的初衷,希望大家体谅我们的苦心。*

https://www.bilibili.com/video/BV1zq4y1v7au/

![SqStack2.png](~/95a3b234-51bd-4aaf-950a-ada62dbe4856.png)

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。